Похоже, вы беспокоитесь об инициализации свойств?
но я могу забыть установить
base.Name в этих производных классах.
Один из способов установить свойство Name - это включить этот установщик в конструктор базового класса следующим образом:
public class MyBaseClass
{
private string _name;
public MyBaseClass(string name)
{
_name = name;
}
}
Тогда все, что происходит от MyBaseClass, должно удовлетворять этому конструктору:
public class MyDerivedClass
{
public MyDerivedClass(string name) : base(name)
{
}
}
Тогда вы также можете сделать свойство либо:
- реферат, чтобы убедиться, что он существует в каждом производном классе с его собственной реализацией
- виртуальный, чтобы обеспечить базовую реализацию и все это должно быть переопределено.
Я не собираюсь рисковать, если вышеприведенное является хорошим дизайном, но оно будет работать, чтобы гарантировать, что все производные классы имеют действительное свойство имени при создании экземпляра.
Другой подход, как предлагают другие ответы, заключается в реализации виртуального свойства, которое выдает исключение в своей базовой реализации.