我看起来并没有找到与我正在处理的相似的东西。希望是一个解决方案,或提供更好的实施。我有一个类可以传递一个可选参数,该参数保留给创建的实例。然后我有一个具有类似可选参数的派生类,但在其非参数构造函数中,无论可选参数如何,都会执行其他准备工作。让它调用基类参数构造函数的正确方法是什么,但仍然执行派生的非参数构造函数。
public class MyBaseClass
{
protected object preserveParm;
protected int someValue;
public MyBaseClass()
{
someValue = 1;
}
public MyBaseClass( object SomeParm ) : this()
{
preserveParm = SomeParm;
}
}
public class DerivedClass : MyBaseClass
{
private int customSecondaryProp;
private DateTime when;
public DerivedClass()
{
customSecondaryProp = 10;
someValue = 5;
}
public DerivedClass( object SomeParm ) : base( SomeParm )
{
when = DateTime.Now;
}
}
所以,如果我做了
DerivedClass test = new DerivedClass( "testing" );
我需要它来命中基类来保存参数,但是还要点击派生类的非参数来设置样本伪值。
现在看来,Derived参数方法被命中,然后命中基类的参数构造函数,该参数构造函数调用基类的“this()”,并将链返回到DerivedClass参数构造函数,完成自身,但永远不会击中DerivedClass构造函数。有没有办法强制baseclass无参数和DerivedClass无参数构造函数?
答案 0 :(得分:3)
看起来你想要这样的东西:
public DerivedClass( object SomeParm ) : base( SomeParm ), this()
但在C#中这是不可能的:see this answer for details 我建议你在方法中实现Derived构造函数初始化,并在两个构造函数中手动调用它:
public class DerivedClass : MyBaseClass
{
private int customSecondaryProp;
private DateTime when;
private void InitializeDerivedClass()
{
customSecondaryProp = 10;
someValue = 5;
}
public DerivedClass()
{
InitializeDerivedClass();
}
public DerivedClass(object SomeParm): base(SomeParm)
{
InitializeDerivedClass();
when = DateTime.Now;
}
}
如果可能,您还可以使用以下语法进行初始化:
private int customSecondaryProp = 10;
答案 1 :(得分:0)
为什么不在这里使用可选参数来强制类型只有一个构造函数。
public DerivedClass(object SomeParam = null) : base(SomeParam) {
customSecondaryProp = 10;
someValue = 5;
if (SomeParam != null) {
when = DateTime.Now;
}
}
public MyBaseClass(object SomeParam) {
someValue = 1;
preserveParam = SomeParam;
}
答案 2 :(得分:0)
public DerivedClass():base(null)
您可以将Null发送到参数构造函数