2014-01-30 44 views
1

我看过并没有完全找到类似于我正在处理的内容。希望有一个解决方案,或提供更好的实施。我有一个可以传递一个可选参数的类,该参数被保存到创建的实例中。然后我有一个具有类似可选参数的派生类,但在其非参数构造函数中执行其他准备工作,而不考虑可选参数。让它调用基类参数构造函数的正确方法是什么,但仍然执行派生的非参数构造函数。调用base()和this()的构造函数

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无参数构造函数?

+3

我通常有非参数的构造函数调用参数的构造函数有一个合适的值,而不是你周围的道路”重新做。然后所有的逻辑结束于类参数最多的构造函数,它可以调用最合适的基类构造函数(如果需要,可以再次填入省略的参数以调用其最参数化的形式) –

+0

@ Damien_The_Unbeliever,从来没有想过相反的事实,因为实际的传入对象比简单的“对象”更复杂,但会研究它。谢谢。 – DRapp

+0

@nawfal,对于已经选择了解决方案的问题,请不要试图将意见反馈给重复项......在我看来,这只是浪费。 – DRapp

回答

3

看来你想要的东西,如:

public DerivedClass(object SomeParm) : base(SomeParm), this() 

但这是不可能在C#:see this answer for details 我建议你实现派生的构造函数初始化在方法中并在两个构造函数中手动调用它:

​​

如果可能的话,你也可以使用以下语法进行初始化:

private int customSecondaryProp = 10; 
+0

heh来调用,这正是我刚刚回答的。你是第一个,所以+1,我删除了我的答案。 :) – hvd

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; 
} 
+0

因为无论我想要设置其他参数的参数,类都不需要该参数。 – DRapp

+0

@DRapp这是可选参数给你的。它可以用'new DerivedClass()'或'DerivedClass(s​​omeObj)'' – JaredPar

0
public DerivedClass():base(null) 

您可以发送空的参数的构造函数

相关问题