Частичная переопределение виртуального автоматического свойства в Детский класс

Пришло время задать теоретический вопрос, с которым я только что столкнулся.

Следующий код действителен и компилируется:

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 и установщик все еще устанавливает объект поддержки в родительском классе), даже если значение недоступно для публики.

21
задан Justin Niessner 7 October 2010 в 17:10
поделиться