メソッドを仮想としてマークInitialize
すると、派生クラスがそのメソッドを自由にオーバーライドできることを意味しbase.Initialize
、プロセスで呼び出されない可能性があります。そのシナリオが発生しても問題がない場合は、メソッドを仮想としてマークしないでください。
Initialize
あなたの場合、各クラスに2つのプライベートメソッドが必要なようです。
public class A
{
public A()
{
Initialize();
}
private void Initialize()
{
}
}
public class B : A
{
public B()
{
Initialize();
}
private void Initialize()
{
}
}
または、テンプレートメソッドのデザインパターンを確認することもできます。次のようにクラスを設計できます。
public class A
{
public A()
{
Initialize();
}
private void Initialize()
{
// Initialize the base class A.
// Then call DerivedInitialize. If this is actually a derived object,
// DerivedInitialize will initialize the derived instance. Otherwise,
// it won't do anything.
DerivedInitialize();
}
protected virtual void DerivedInitialize()
{
}
}
public class B : A
{
public B()
{
Initialize();
}
protected override void DerivedInitialize()
{
// Initialize B-specific stuff...
}
}