Maison >développement back-end >C++ >Pourquoi les parenthèses sont-elles facultatives dans les constructeurs d'initialiseur d'objet C# 3.0 ?
Quelle est la raison pour laquelle C# 3.0 a introduit des parenthèses facultatives dans les constructeurs d'initialiseur d'objet ?
En tant que sucre syntaxique, C# 3.0 permet d'omettre les parenthèses dans les appels de constructeur dans les initialiseurs d'objet, à condition qu'un constructeur sans paramètre soit présent. Par exemple :
<code class="language-c#">var x = new XTypeName { PropA = value, PropB = value }; // 括号可选</code>
Raisons des supports optionnels
L'équipe C# a décidé de rendre les parenthèses facultatives en fonction des considérations suivantes :
Pourquoi ne pas rendre les parenthèses facultatives dans tous les appels du constructeur par défaut ?
L'introduction de parenthèses facultatives dans le cas général peut créer une ambiguïté sémantique, comme dans l'exemple suivant :
<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>
Dans ce cas, la ligne 1 appelle le constructeur par défaut de C puis appelle la méthode d'instance M, tandis que la ligne 2 crée une nouvelle instance de B.M et appelle son constructeur par défaut. Rendre les parenthèses facultatives à la ligne 1 provoque une ambiguïté, obligeant le compilateur à introduire des règles complexes pour la résoudre. Le coût potentiel de cette complexité supplémentaire dépasse dans ce cas l’avantage des parenthèses facultatives.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!