C# 物件初始化器允許省略建構函式括號的原因
C# 3.0 引入了物件初始化器,其可選語法允許在建構函式具有無參數建構函式的情況下省略建構函式中的括號。正如前 C# 編譯器團隊負責人 Mads Torgersen 所解釋的那樣,此功能具有以下幾個優點:
設計考量:
技術實作:
避免歧義:
雖然在物件初始化器中允許省略括號,但在沒有物件初始化器的物件建立表達式中,它仍然是必需的。這是因為在這種情況下省略括號可能會產生歧義,如下例所示:
<code class="language-csharp">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 } }</code>
如果在第 1 行省略可選括號,編譯器將無法確定是呼叫 C 的預設建構函式還是建立一個新的 B.M 實例。這將導致語義歧義和潛在錯誤。
因此,可選建構函式括號僅限於物件初始化器,在物件初始化器中,省略括號不會對語言的語法或語意構成任何風險。
以上是為什麼 C# 物件初始值設定項中允許使用可選建構函數括號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!