2012-06-04 34 views

回答

4

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

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

不过,如果你想使用的基类的无参数的构造以外的构造函数,你必须明确地说明这一点,即:

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

这将明确地使用它接受一个字符串构造函数作为论据。

1

如果您未指定要调用哪个构造函数,则会默认执行默认构造函数的调用。当您省略构造函数调用时,C#将为您调用默认的一个;如果没有默认的构造函数,你的代码就不会编译。

10.11.1构造函数初始化

所有实例构造(除了那些类对象)隐含地包括紧接在构造体前另一个实例构造的调用。

[...]

如果一个实例构造函数没有构造函数初始化,被隐式地提供base()形式的构造函数初始化。

根据C#规范,来自您的问题的两个代码片段相互等效。