Как инициализировать виртуальное автоматическое свойство?

2

Есть ли способ инициализировать свойство virtual без использования конструктора? или я должен просто создать личное поле?

  • 0
    Я не понимаю акцент на виртуальном в этом вопросе. Вы не можете инициализировать не виртуальное автоматическое свойство без использования конструктора.
  • 1
    Потому что нехорошо вызывать виртуальный член вызова в конструкторе :)
Теги:
c#-3.0

2 ответа

7
Лучший ответ

Виртуальный или нет, вам нужен конструктор. Или он будет иметь значение по умолчанию для этого типа.


Потому что нехорошо вызывать виртуальный член в конструкторе

Правильно, вам нужно будет шагнуть осторожно. Нормальные правила действуют. Чтобы быть в безопасности, вы должны создать свою собственность, чтобы она не нуждалась в инициализации или только инициализировала ее в производных конструкторах, где либо класс, либо свойство запечатаны.

3

Обратите внимание, что будет много случаев, когда автоматические свойства практически не имеют смысла.

В случае виртуального автоматического свойства я бы сказал, что часть инициализации делает эту проблему проблемой и удалит "автоматическую" часть и создаст фоновое поле.

Конечно, поскольку базовые конструкторы вызываются перед конструкторами потомков, если базовый конструктор инициализирует свойство неправильным значением, конструктор-потомк имеет возможность исправить это до того, как построение объекта будет окончательным.

  • 1
    Да, но предположим, что производный класс реализует более сложный метод получения или установки, полагаясь на другие поля производного класса. Эти другие поля еще не будут инициализированы.
  • 0
    Согласен, но это проблема, которую вы будете иметь со всем виртуальным кодом с точки зрения конструктора.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню