Tôi tự hỏi tại sao khi bạn đặt thuộc tính System.Diagnostics.Conditional ("DEBUG") vào một phương thức ảo trong lớp cơ sở mà bạn không nhận được lỗi trình biên dịch trên các lớp dẫn xuất ghi đè cùng một phương thức ảo nhưng không có thuộc tính có điều kiện khi điều kiện không được đáp ứng. Ví dụ:Thuộc tính có điều kiện trên hàm ảo
public class MyBaseClass
{
[System.Diagnostics.Conditional("DEBUG")]
public virtual void Test()
{
//Do something
}
}
public class MyDerivedClass : MyBaseClass
{
public override void Test()
{
//Do something different
}
}
Dường như khi DEBUG không được xác định, điều kiện về cơ bản sẽ tạo ra kích thước mà không thể tồn tại vì không có hàm ảo trong đầu ra IL thực tế. Tuy nhiên, trong thử nghiệm của tôi, trình biên dịch dường như tạo ra các mã chỉ tốt một trong hai cách. Có điều kiện chỉ cần ném ra IL cho cơ thể chức năng nhưng không thực hiện bất kỳ thay đổi thực sự cho chữ ký lớp?
tiếp tuyến: di chuyển thuộc tính có điều kiện từ lớp ảo của lớp cơ sở sang kết quả ghi đè của lớp dẫn xuất trong một lỗi trình biên dịch. Điều này có ý nghĩa khi xem xét hành vi được nêu chi tiết trong câu trả lời. – devgeezer