Base Classes构造函数在没有调用的情况下被命中?

max*_*axp 2 c# oop

鉴于代码:

public class A
{
    public A()
    {
        throw new Exception();
    }
}

public class B : A
{
    public B(int i)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

然后运行该行:

  var x = new B(2);
Run Code Online (Sandbox Code Playgroud)

我永远不会指望A构造函数被命中(除非我添加base())到B构造函数声明的结尾.

奇怪的是它似乎受到了打击(抛出异常).这是默认行为吗?这让我感到震惊,因为我完全没想到它A的构造函数被击中了

Tim*_* S. 8

如果你不包括任何base(..)或者this(..),它就像你有的一样base().来自C#规范:


如果实例构造函数没有构造函数初始值设定项,base()则隐式提供表单的构造函数初始值设定项.因此,表单的实例构造函数声明

C(...) {...}
Run Code Online (Sandbox Code Playgroud)

完全等同于

C(...): base() {...}
Run Code Online (Sandbox Code Playgroud)

你可能一直在寻找A一个abstract class,所以你不能直接创建一个实例A.

public abstract class A
{
}

public class B : A
{
    public B(int i)
    {

    }
}

public static void Main()
{
    // A a = new A(); // doesn't compile
    A a = new B(2); // valid
}
Run Code Online (Sandbox Code Playgroud)