Болезненное любопытство. Скажем, у меня есть такая иерархия:
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 # или оставлено на усмотрение компилятора?
Обновление
Оказывается, в спецификации действительно конкретно говорится, что автоматически реализуемые свойства реализуются с помощью «скрытого
backing field ». (Раздел 10.7.3) Ничего не сказано о моем конкретном вопросе. Предполагая, что слово« скрытый »здесь относится к той же функции сокрытия элементов, обеспечиваемой ключевым словом new
, я должен заключить, что поле поддержки всегда создается независимо от использования.
Я предполагаю, что связанный с этим вопрос может быть следующим: «Создано ли поле поддержки для автоматически реализуемого свойства, к которому никогда не осуществляется доступ?» Тот же основной аргумент, тот же вывод.