当使用默认构造函数实例化继承的类时,它是否也调用基类构造函数?

有谁知道C#的行为是什么?所有.NET语言都一样吗?     
已邀请:
是 - 如果您没有显式调用基类构造函数,则会在派生类中的任何构造函数中发生这种情况。
class Base
{
  Base(){}
  Base(int i){}
}

class Derived : Base
{
  Derived(bool x) {} // calls Base.Base()
}

class Derived2 : Base
{
  Derived2() : base(10) {} // calls Base.Base(int)
}
    
是的,它会自动调用基类的默认构造函数。默认构造函数没有参数。 如果没有默认构造函数,则必须使用以下语法手动调用基类构造函数:
public MyClass() : base(parameters, ...)
来源:使用构造函数(C#)     
是的,它确实。这就是您无法创建不调用基类的派生类的原因。
public class A
{
    public A(string s)
    {}
}

public class B : A
{
    public B()
    {}
}
导致编译器错误。     
它肯定适用于C# - 我不能说其他语言,但我无法想象他们的编译器会产生不同的IL。 举个例子:
class Parent { }
class Child : Parent { }
如果我们看看
Child
的构造函数中生成的IL,我们会看到这条重要的行:
L_0001: call instance void Parent::.ctor()
这清楚地表明我们正在调用
Parent
类的默认构造函数。     
只是为了添加其他答案,为了使OO正常工作,它必须为每个类调用一个构造函数。如果没有,您无法保证您的班级处于已知良好状态。 即使你正在做一些奇怪的事情(例如序列化),它们也需要一个默认的构造函数,因为同样必须调用一个构造函数。     

要回复问题请先登录注册