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

C# C语言中的多级继承构造函数#,c#,inheritance,constructor,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中的构造函数,我可以

在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中的构造函数


谢谢。

您不能调用祖父母类的构造函数。
但是,您也不需要这样做,因为基类已经这样做了

当您编写
public(parameterX):base(x)
时,它将调用
B(x)
,后者将依次调用
A(x)


一般来说,由于基类的构造函数总是调用它的基类构造函数(你的祖辈),所以显式调用祖辈构造函数是没有意义的,因为这样会构造它两次。

你不能调用祖辈类的构造函数。
但是,您也不需要这样做,因为基类已经这样做了

当您编写
public(parameterX):base(x)
时,它将调用
B(x)
,后者将依次调用
A(x)


一般来说,由于基类的构造函数总是调用它的基类构造函数(你的祖辈),所以不能显式调用祖辈构造函数,虽然我不太明白你想做什么,你可能会想出一个更好的实际设计,但是你可以通过在B中添加另一个构造函数来实现你所需要的,该构造函数将Bar参数作为a,但只需调用(Bar)构造函数,什么都不做,这样,当你做C(bar):base(bar)时,它会先到B,然后到A。非常难看。

虽然我不太明白你想做什么,你可能会想出一个更好的实际设计,但你可能可以通过在B中添加另一个构造函数来实现你所需要的,该构造函数将bar参数作为A,但是什么也不做,只要调用一个(Bar)构造函数,这样当你调用C(Bar):base(Bar)时,它会先到B,然后到A。非常难看。

为什么不让B构造函数调用A,所以当调用C时,A被调用。为什么不让B构造函数调用A,所以当调用C时,A被调用。我知道,但是这个问题比我在这里写的要复杂一点,B构造函数从类foo获取一个参数,C构造函数从类bar获取一个参数。Foo和bar是不同的,但都有类D作为父类。然后类A构造函数接受其中一个参数,因为它使用模板。所以我不能通过B,但A可以使用我的参数。不。必须始终调用(直接)基类构造函数。不能有未构造的类。考虑将<代码>受保护的< /代码>构造函数添加到<代码> b>代码>。而且,这听起来像是一个糟糕的设计;考虑重构它。我可能会添加受保护的构造函数,设计不是最好的,我试图将现有的环境集成到一个可以帮助我节省大量工作的黑客中。谢谢我知道,但问题比我在这里写的要复杂一些,B构造函数从类foo中获取一个参数,C构造函数从类bar中获取一个参数。Foo和bar是不同的,但都有类D作为父类。然后类A构造函数接受其中一个参数,因为它使用模板。所以我不能通过B,但A可以使用我的参数。不。必须始终调用(直接)基类构造函数。不能有未构造的类。考虑将<代码>受保护的< /代码>构造函数添加到<代码> b>代码>。而且,这听起来像是一个糟糕的设计;考虑重构它。我可能会添加受保护的构造函数,设计不是最好的,我试图将现有的环境集成到一个可以帮助我节省大量工作的黑客中。谢谢我可能会这样做,我知道这是一个糟糕的设计,只是想为我节省大量的工作。我可能会这样做,我知道这是一个糟糕的设计,只是想为我节省大量的工作。