Время для теоретического вопроса, с которым я только что столкнулся.
Следующий код действителен и компилируется:
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; }
}
Мой вопрос:
Почему С# позволяет частично переопределить свойство TestProperty
auto в дочернем, когда это приводит к частично непредсказуемому поведению? Есть ли практическое приложение?
Мне разрешено устанавливать значение TestProperty с помощью родительского сеттера (я проверил генерируемый IL, а сеттер по-прежнему устанавливает объект поддержки в родительском классе), хотя значение не доступно для публики.