Jam*_*mes 16 c# constructor abstract-class derived-class
我的问题是我想将一个对象传递给派生类,但它必须在基类构造函数之前完成,因为基类将立即调用派生类Start()使用该对象的方法.
以下是基类的摘录(为方便起见,从BarcodeScanner重命名).
public abstract class MyBase
{
public MyBase()
{
if (Initialize())
this.Start();
}
public abstract bool Initialize();
public abstract void Start();
}
Run Code Online (Sandbox Code Playgroud)
这是我正在创建的派生类.
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());
}
}
Run Code Online (Sandbox Code Playgroud)
我怀疑你可以让C#在基础构造函数之前执行派生构造函数; 所以我真的只是在寻找一个解决方案,在使用对象之前将对象传递给派生类.
我通过在MyDerived构造函数中放置Initialize/Start if块来解决这个问题.但是,还有其他类派生自基类; 所以我最终不得不在每个派生类中重复这个Initialize/Start代码块.我想看一个修改基类的替代方法.
Ada*_*lph 19
恕我直言你的设计是错误的.您不应该从构造函数中启动该过程.您的消费代码应在需要时显式调用Start()方法.
And*_*are 18
你想要做的事情在C#中是不可能的.必须在任何派生类的构造函数之前运行基类中的构造函数,否则可能存在损坏的对象状态.子对象必须能够假定其基础是完全构造和可用的.