Создают ли анонимные резервные поля для виртуальных автоматически реализуемых свойств, когда они переопределяются?

Болезненное любопытство. Скажем, у меня есть такая иерархия:

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

Я предполагаю, что связанный с этим вопрос может быть следующим: «Создано ли поле поддержки для автоматически реализуемого свойства, к которому никогда не осуществляется доступ?» Тот же основной аргумент, тот же вывод.

7
задан G-Wiz 20 June 2011 в 22:17
поделиться