1

我从 ListBox 继承。我需要显式调用基本构造函数吗?

public class MyListBox : ListBox
{
   public MyListBox() : base()
   {
   }

   // or 

   public MyListBox()
   {
   }
}
4

2 回答 2

4

您列出的两个选项将编译为相同的代码。

包含的唯一原因: base()是明确表示您正在调用基类默认构造函数,而不是设计的其他构造函数。如果离开,这会自动发生。因此,这完全是可选的。

但是,如果要使用基类的无参数构造函数以外的构造函数,则必须明确说明这一点,即:

public MyListBox() : base("Foo")
{ }

这将显式使用接受字符串作为参数的构造函数。

于 2012-06-04T15:56:05.333 回答
1

如果您未指定要调用的构造函数,则会隐式执行默认构造函数的调用。当您省略构造函数调用时,C# 将为您调用默认的构造函数;如果没有默认构造函数,您的代码将无法编译。

10.11.1 构造函数初始化器

所有实例构造函数(除了类对象的构造函数)都隐含地在构造函数主体之前包含对另一个实例构造函数的调用。

[...]

如果实例构造函数没有构造函数初始化器,base()则隐式提供表单的构造器初始化器。

根据 C# 规范,您问题中的两个代码片段彼此等效。

于 2012-06-04T15:56:55.973 回答