Используйте абстрактное свойство, если у вас нет реализации по умолчанию, и когда производные классы должны его реализовать.
Используйте виртуальное свойство, если у вас есть реализация в базовом классе, но вы хотите разрешить переопределение.
Используйте ключевое слово override
для переопределения члена. Отметьте элемент как sealed override
, если он не должен быть переопределен снова.
Не отмечайте свойство как abstract
или virtual
, если вы не хотите, чтобы он был переопределен.
Используйте ключевое слово new
, чтобы скрыть не абстрактный, не виртуальный элемент (это редко бывает хорошей идеей).
Как определить абстрактные свойства
Я обнаружил, что абстрактные свойства часто встречаются в дизайне, что подразумевает, что они будут иметь специфичную для конкретного типа логику и / или побочные эффекты. Вы в основном говорите: «Вот точка данных, которую должны иметь все подклассы, но я не знаю, как ее реализовать». Однако свойства, которые содержат большое количество логики и / или вызывают побочные эффекты, могут быть нежелательными. Это важное соображение, хотя для него не существует правильного / неправильного способа.
См.:
Лично я обнаружил, что я часто использую абстрактные методы, но абстрактные свойства редко.