两个带构造函数的抽象类,它们基类继承

时间:2017-09-28 21:40:51

标签: c# inheritance abstract-class

我今天在接受采访时被问到,如果在C#抽象类" C"中,是由抽象类" B"继承,具体类" A"继承" B",如果" A"使用哪个构造函数?没有,我假设" C"因为父母有优先权,但不确定。

1 个答案:

答案 0 :(得分:2)

形成A <- B <- C的类层次结构,因此两者按特定顺序使用和调用。

abstract class C
{
    public C()
    {
        Console.WriteLine("C()");
    }
}

abstract class B : C
{
    public B()
    {
        Console.WriteLine("B()");
    }
}

class A : B
{
}

void Main()
{
    A a = new A();
}

输出:

C()
B()

在C#中,您不需要显式调用基础构造函数,它将被隐式调用。因此,默认构造函数A()将调用B(),它将调用C()

  

如果构造函数签名不同,那该怎么办?

如果BC的构造函数有参数(没有可用的参数构造函数),那么编译器会强制您使用base关键字提供参数。

abstract class C
{
    public C(int foo)
    {
        Console.WriteLine("C()");
    }
}

abstract class B : C
{
    public B()
        : base(0 /* foo must be provided */)
    {
        Console.WriteLine("B()");
    }
}