болезненное любопытство. Скажем, у меня есть эта иерархия:
class Base {
public virtual int Field { get; set; }
}
class Derived : Base {
int _field;
public override int Field { get { return _field; } set { _field = value; } }
}
Если я создаю экземпляр Base
, компилятор волшебным образом создаст вспомогательное поле для свойства Field
.
Итак, учитывая, что Derived
не ссылается на базовую реализацию, создается ли вспомогательное поле при создании экземпляра Derived
? Это продиктовано в спецификации C # или оставлено для реализации компилятора?
Обновление
Оказывается, что в спецификации действительно указано, что автоматически реализуемые свойства реализуются с помощью "скрытого"
вспомогательное поле ". (Раздел 10.7.3) Ничего не сказано о моем конкретном вопросе. Предполагая, что слово" скрытый "относится к той же функции скрытия членов, которая предоставляется ключевым словом new
, я должен заключить, что вспомогательное поле всегда создано независимо от использования.
Я предполагаю, что связанный вопрос может быть следующим: «Создано ли вспомогательное поле для автоматически реализуемого свойства, к которому никогда не осуществляется доступ?» Тот же основной аргумент, тот же вывод.