C# 3.0 在对象初始化器构造函数中引入可选括号的原因是什么?
作为一种语法糖,C# 3.0 允许在对象初始化器中省略构造函数调用中的括号,前提是存在无参数构造函数。例如:
<code class="language-c#">var x = new XTypeName { PropA = value, PropB = value }; // 括号可选</code>
可选括号的理由
C# 团队决定使括号可选是基于以下几个考虑:
为什么不在所有默认构造函数调用中使括号可选?
在一般情况下引入可选括号可能会产生语义歧义,如下例所示:
<code class="language-c#">class P { class B { public class M { } } class C : B { new public void M(){} } static void Main() { new C().M(); // 1 new C.M(); // 2 } }</code>
在这种情况下,第 1 行调用 C 的默认构造函数,然后调用实例方法 M,而第 2 行创建一个 B.M 的新实例并调用其默认构造函数。在第 1 行中使括号可选会导致歧义,迫使编译器引入复杂的规则来解决它。这种额外复杂性的潜在成本超过了在这种情况下可选括号的好处。
以上是为什么 C# 3.0 对象初始化构造函数中的括号是可选的?的详细内容。更多信息请关注PHP中文网其他相关文章!