我正在尝试为正在编写的程序实现良好的设计模式。我有一个这样的类结构。
abstract class SomeBase
{
public SomeObject obj { get; protected set; }
protected SomeBase(SomeObject x)
{
obj = x;
}
//Other methods and fields...
}
public class SomeDerived : SomeBase
{
public SomeDerived() : base(new SomeObject(this))
{
}
}
现在,正如您确定的那样,您不能在基本构造函数中传递它,因为该对象此时尚未初始化。无论如何,我真的希望有一个解决方法。对于我来说,允许SomeDerived()
处理基类字段的设置不是最佳实践。我想将此新对象传递给整个链。 最佳答案
这是不可能的,请在构造函数之后使用Init方法:
abstract class SomeBase
{
private SomeObject _obj { get; set; }
public SomeObject obj
{
get
{ // check _obj is inited:
if (_obj == null) throw new <exception of your choice> ;
return _obj;
}
}
protected SomeBase()
{
obj = null;
}
protected void Init()
{
obj = x;
}
//Other methods and fields...
}
public class SomeDerived : SomeBase
{
public SomeDerived() : base()
{
Init(new SomeObject(this));
}
}
关于c# - 将此传递给基本构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25919007/