Heim >Backend-Entwicklung >C++ >Warum sind Klammern in einigen C#-Objektinitialisierern optional, in anderen jedoch erforderlich?
Optionale Klammern im C#-Objektinitialisiererkonstruktor: Gründe und Begriffsklärung
In C# 3.0 ermöglichen Objektinitialisiererkonstruktoren das Weglassen von Klammern, wenn ein parameterloser Konstruktor vorhanden ist. Diese Funktion wurde basierend auf den folgenden Faktoren hinzugefügt:
Fehlende Klammern im Standardkonstruktoraufruf
In Objekterstellungsausdrücken ohne Objektinitialisierer sind jedoch weiterhin Klammern in Standardkonstruktoraufrufen erforderlich. Diese Einschränkung soll Unklarheiten vermeiden. Zum Beispiel im folgenden Code:
<code class="language-csharp">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>
Zeile 1 erstellt ein neues C-Objekt, ruft dessen Standardkonstruktor auf und ruft die M-Instanzmethode für das neue Objekt auf. Zeile 2 erstellt eine Instanz von B.M und löst seinen Standardkonstruktor aus. Wenn die Klammern in Zeile 1 optional wären, wäre Zeile 2 mehrdeutig, da sie sich auch auf C.M. beziehen könnte.
Mehrdeutige Erkennungsmethode
Die Bestimmung der Mehrdeutigkeit in C#-Funktionen erfordert mehrere Methoden:
Beispiele für mögliche Unklarheiten
Erwägen Sie das Hinzufügen eines neuen Präfixoperators „frob“:
<code class="language-csharp">x = frob 123 + 456;</code>
Dies kann so interpretiert werden, dass eine Frob-Operation für das Ergebnis von 123.456 ausgeführt wird oder einer Variablen vom Typ Frob mit dem Namen x 10 zugewiesen wird.
In einem anderen Beispiel ist der folgende Ausdruck in C# 2.0 mehrdeutig:
<code class="language-csharp">yield(x);</code>
Es kann bedeuten, x in einem Iterator zu erzeugen, oder es kann bedeuten, die Yield-Methode mit x als Parameter aufzurufen. Die Mehrdeutigkeit wird durch die Änderung in „yield return(x)“ beseitigt.
Das obige ist der detaillierte Inhalt vonWarum sind Klammern in einigen C#-Objektinitialisierern optional, in anderen jedoch erforderlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!