Start()
ここでの問題は、オブジェクトを派生クラスに渡したいということですが、基本クラスはオブジェクトを使用する派生クラスのメソッドをすぐに呼び出すため、基本クラスのコンストラクターの前に行う必要があります。
以下は、基本クラスからの抜粋です (便宜上、 BarcodeScannerから名前が変更されています)。
public abstract class MyBase
{
public MyBase()
{
if (Initialize())
this.Start();
}
public abstract bool Initialize();
public abstract void Start();
}
これが私が作成している派生クラスです。
class MyDerived : MyBase
{
private string sampleObject;
public MyDerived (string initObject)
{
sampleObject = initObject;
}
public override bool Initialize()
{
return GetDevice();
}
public override void Start()
{
Console.WriteLine("Processing " + sampleObject.ToString());
}
}
基本コンストラクターの前に派生コンストラクターを C# で実行できるとは思えません。オブジェクトが使用される前に、オブジェクトを派生クラスに渡すためのソリューションを本当に探しています。
MyDerived
コンストラクター内に Initialize/Start if ブロックを配置することで、これを回避しました。ただし、基本クラスから派生する他のクラスがあります。そのため、すべての派生クラスでこの初期化/開始コードのブロックを繰り返さなければならなくなりました。基本クラスを変更する代わりの方法を知りたいです。