Maison >développement back-end >C++ >Pourquoi les parenthèses sont-elles facultatives dans certains initialiseurs d'objets C# mais obligatoires dans d'autres ?
Parenthèses facultatives dans le constructeur d'initialisation d'objet C# : raisons et homonymie
En C# 3.0, les constructeurs d'initialiseur d'objet permettent d'omettre les parenthèses si un constructeur sans paramètre est présent. Cette fonctionnalité a été ajoutée en fonction des facteurs suivants :
Parenthèses manquantes dans l'appel du constructeur par défaut
Cependant, dans les expressions de création d'objet sans initialiseur d'objet, les parenthèses dans les appels de constructeur par défaut sont toujours requises. Cette restriction vise à éviter toute ambiguïté. Par exemple, dans le code suivant :
<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>
La ligne 1 crée un nouvel objet C, appelle son constructeur par défaut et appelle la méthode d'instance M sur le nouvel objet. La ligne 2 crée une instance de B.M et déclenche son constructeur par défaut. Si les crochets de la ligne 1 étaient facultatifs, la ligne 2 serait ambiguë car elle pourrait également faire référence à C.M.
Méthode de détection ambiguë
Déterminer l'ambiguïté dans les fonctions C# implique plusieurs méthodes :
Exemples d'ambiguïté potentielle
Pensez à ajouter un nouvel opérateur de préfixe "frob" :
<code class="language-csharp">x = frob 123 + 456;</code>
Cela peut être interprété comme effectuant une opération frob sur le résultat de 123 456, ou assigner 10 à une variable de type frob nommée x.
Dans un autre exemple, l'expression suivante en C# 2.0 est ambiguë :
<code class="language-csharp">yield(x);</code>
Cela peut signifier produire x dans un itérateur, ou cela peut signifier appeler la méthode rendement avec x comme paramètre. L'ambiguïté est levée en le remplaçant par "yield return(x)".
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!