假设有一个基类A
和一个班级B
源自A
。
那么我们知道类的构造函数A
永远不会被类继承B
。然而,当一个新对象B
创建,然后 - 类的默认构造函数A
在类的默认/自定义构造函数之前调用B
被调用。也许这样做的目的是类的字段A
需要初始化为默认值。
现在,假设该类A
定义了一个自定义构造函数。这意味着类的默认构造函数A
被编译器默默删除。现在,创建一个新的类实例B
, 类的哪个构造函数A
在调用类之前自动调用B
的构造函数? (班级怎么样A
在这种情况下字段会被初始化吗?)
现在,创建一个新的类实例B
, 类的哪个构造函数A
在调用类之前自动调用B
构造函数?
基本上,代码将无法编译。每个构造函数必须隐式或显式链接到另一个构造函数。它链接到的构造函数可以位于同一个类中(this
)或基类(与base
).
像这样的构造函数:
public B() {}
隐式地是:
public B() : base() {}
...如果您根本不指定构造函数,它将以相同的方式隐式添加 - 但它仍然必须有一些东西可以调用。例如,您的场景:
public class A
{
public A(int x) {}
}
public class B : A {}
导致编译器错误:
错误CS7036:没有给出与所需的形式参数相对应的参数'x'
of 'A.A(int)'
但是,您可以显式指定不同的构造函数调用,例如
public B() : base(10) {} // Chain to base class constructor
or
public B() : this(10) {} // Chain to same class constructor, assuming one exists
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)