我从ListBox继承。我是否需要显式调用基础构造函数?
public class MyListBox : ListBox
{
public MyListBox() : base()
{
}
// or
public MyListBox()
{
}
}
答案 0 :(得分:4)
您列出的两个选项将编译为相同的代码。
包含: base()
的唯一原因是明确表示您正在设计调用基类默认构造函数而不是其他一些构造函数。如果不使用,则会自动发生。因此,这是完全可选的。
但是,如果要使用除基类的无参数构造函数之外的构造函数,则必须明确说明这一点,即:
public MyListBox() : base("Foo")
{ }
这将显式使用接受字符串作为参数的构造函数。
答案 1 :(得分:1)
如果未指定要调用的构造函数,则会隐式执行默认构造函数的调用。省略构造函数调用时,C#将为您调用默认调用;如果没有默认构造函数,则代码将无法编译。
10.11.1构造函数初始值设定项
所有实例构造函数(类对象除外)都隐式包含在构造函数体之前的另一个实例构造函数的调用。
[...]
如果实例构造函数没有构造函数初始值设定项,则隐式提供形式为
base()
的构造函数初始值设定项。
根据C#规范,您问题中的两个代码段彼此相同。