我从ListBox继承。我是否需要显式调用基础构造函数?从框架控件继承时,我应该调用基础构造函数吗?
public class MyListBox : ListBox
{
public MyListBox() : base()
{
}
// or
public MyListBox()
{
}
}
我从ListBox继承。我是否需要显式调用基础构造函数?从框架控件继承时,我应该调用基础构造函数吗?
public class MyListBox : ListBox
{
public MyListBox() : base()
{
}
// or
public MyListBox()
{
}
}
您列出的两个选项将编译为相同的代码。
包含: base()
的唯一原因是明确表示您正在调用基类默认构造函数而不是其他某个构造函数。如果停止,这会自动发生。因此,这是完全可选的。
不过,如果你想使用的基类的无参数的构造以外的构造函数,你必须明确地说明这一点,即:
public MyListBox() : base("Foo")
{ }
这将明确地使用它接受一个字符串构造函数作为论据。
如果您未指定要调用哪个构造函数,则会默认执行默认构造函数的调用。当您省略构造函数调用时,C#将为您调用默认的一个;如果没有默认的构造函数,你的代码就不会编译。
10.11.1构造函数初始化
所有实例构造(除了那些类对象)隐含地包括紧接在构造体前另一个实例构造的调用。
[...]
如果一个实例构造函数没有构造函数初始化,被隐式地提供
base()
形式的构造函数初始化。
根据C#规范,来自您的问题的两个代码片段相互等效。