По большей части я бы просто спроектировал класс для настройки тех полей, которые ему нужны, в своем собственном конструкторе, и позволил производным классам устанавливать те, которые им нужны, только для них.
Если бы я хотел, чтобы определенное поле было переопределено, я бы использовал его через свойство с отложенной загрузкой.
public abstract class MyClass
{
private SomeType _someField = null; // Never touch this field in any member but
// the SomeProp property
// Maybe use Lazy<SomeType> to make this more obvious.
protected SomeType CreateSomeType();
public SomeType SomeProp
{
get
{
return _someField = _someField ?? CreateSomeType();
}
}
}
Теперь я не думаю о "настройке«объект, я просто действую так, как будто у него всегда есть готовый к работе SomeProp
, и пока я не использую его в конструкторе, он будет работать.
Если это не сработаетв конкретном случае я бы рассмотрел фабричный шаблон или шаблон репозитория.