C# 对象初始化器允许省略构造函数括号的原因
C# 3.0 引入了对象初始化器,其可选语法允许在构造函数具有无参数构造函数的情况下省略构造函数中的括号。正如前 C# 编译器团队负责人 Mads Torgersen 所解释的那样,此功能具有以下几个优点:
设计考量:
技术实现:
避免歧义:
虽然在对象初始化器中允许省略括号,但在没有对象初始化器的对象创建表达式中,它仍然是必需的。这是因为在这种情况下省略括号可能会产生歧义,如下例所示:
class P { class B { public class M { } } class C : B { new public void M(){} } static void Main() { // 调用默认构造函数,然后是方法 M new C().M(); // 1 // 使用默认构造函数创建一个新的 B.M 实例 new C.M(); // 2 } }
如果在第 1 行省略可选括号,编译器将无法确定是调用 C 的默认构造函数还是创建一个新的 B.M 实例。这将导致语义歧义和潜在错误。
因此,可选构造函数括号仅限于对象初始化器,在对象初始化器中,省略括号不会对语言的语法或语义构成任何风险。
以上是为什么 C# 对象初始值设定项中允许使用可选构造函数括号?的详细内容。更多信息请关注PHP中文网其他相关文章!