C#中的多级继承构造函数

时间:2011-10-26 23:00:18

标签: c# inheritance constructor

C#中是否有办法调用祖父的构造函数?假设我有:

public class A
{
   public A(parameterX x)
   {
      doSomething();
   }
}

public class B : A
{
   public B(parameterX x) : base(x)
   {
      doSomethingElse();
   }
}

然后我有:

public class C : B
{
}

我希望C中的构造函数在A中调用构造函数,我可以用它来做什么? 是否有类似的东西:

public C(parameterX x) : base : base(x)

或者如何从C中调用A中的构造函数?

感谢。

2 个答案:

答案 0 :(得分:4)

你无法调用祖父母班级的构造函数 但是,您也不需要,因为基类已经存在。

当您写public C(parameterX x) : base(x)时,它会拨打B(x),然后拨打A(x)

一般情况下,由于你的基类构造函数总是会调用它的基本构造函数(你的祖父母),因此能够显式调用祖父项构造函数是没有意义的,因为这最终会构造它两次。

答案 1 :(得分:1)

虽然我真的不明白你想做什么,你可能会想出更好的实际设计,你可以通过在B中添加另一个将Bar参数作为A的构造函数来实现你所需要的。 ,但是在它只是调用A(Bar)构造函数时什么都不做,那样当你做C(bar)时:base(bar)它将转到B然后转到A.丑陋地狱。