Thời gian cho một câu hỏi lý thuyết mà tôi vừa chạy qua.Ghi đè một phần một thuộc tính tự động ảo trong lớp con
Các mã sau đây là hợp lệ và biên dịch:
public class Parent
{
public virtual object TestProperty { get; set; }
}
public class Child : Parent
{
private string _testValue = "Hello World!";
public override object TestProperty
{
get { return _testValue; }
}
}
public class Consumer
{
Parent p = new Child();
public Consumer(){ p.TestProperty = 3; }
}
Câu hỏi của tôi là:
Tại sao C# cho phép tôi một phần ghi đè lên các tài sản TestProperty
tự động trong một đứa trẻ khi nó dẫn đến hành vi một phần không thể đoán trước ? Có ứng dụng thực tế nào không?
Tôi được phép đặt giá trị của TestProperty bằng cách sử dụng setter của cha mẹ (tôi đã kiểm tra IL đang được tạo và setter vẫn đặt đối tượng sao lưu trong lớp cha) mặc dù giá trị không thể truy cập công khai.
Câu hỏi thú vị! –
Tôi chắc chắn có rất nhiều điều kỳ lạ như thế này sẽ biên dịch và chức năng, nhưng không có ứng dụng thực tế và tiềm năng tác dụng phụ xấu xí. Hammers xây nhà hoặc đập ngón tay cái tùy thuộc vào cách bạn sử dụng chúng :) –
@Dave - Rất đúng. Tôi chỉ muốn chắc chắn rằng, trong trường hợp này, đập ngón tay cái của tôi với một cái búa không phục vụ một số mục đích mà tôi chỉ không nhìn thấy. –