Heim >Backend-Entwicklung >C++ >Warum sind Klammern in C# 3.0-Objektinitialisiererkonstruktoren optional?
Was ist der Grund, warum C# 3.0 optionale Klammern in Objektinitialisiererkonstruktoren eingeführt hat?
Als syntaktischer Zucker erlaubt C# 3.0 das Weglassen von Klammern in Konstruktoraufrufen in Objektinitialisierern, sofern ein Parameterloser Konstruktor vorhanden ist. Zum Beispiel:
<code class="language-c#">var x = new XTypeName { PropA = value, PropB = value }; // 括号可选</code>
Gründe für optionale Klammern
Das C#-Team hat aufgrund der folgenden Überlegungen beschlossen, Klammern optional zu machen:
Warum nicht Klammern in allen Standardkonstruktoraufrufen optional machen?
Die Einführung optionaler Klammern im allgemeinen Fall kann zu semantischer Mehrdeutigkeit führen, wie im folgenden Beispiel:
<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>
In diesem Fall ruft Zeile 1 den Standardkonstruktor von C auf und ruft dann die Instanzmethode M auf, während Zeile 2 eine neue Instanz von B.M erstellt und dessen Standardkonstruktor aufruft. Wenn die Klammern in Zeile 1 optional sind, führt dies zu Mehrdeutigkeiten und zwingt den Compiler, komplexe Regeln einzuführen, um das Problem aufzulösen. Die potenziellen Kosten dieser zusätzlichen Komplexität überwiegen in diesem Fall den Nutzen optionaler Klammern.
Das obige ist der detaillierte Inhalt vonWarum sind Klammern in C# 3.0-Objektinitialisiererkonstruktoren optional?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!