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