Maison >développement back-end >C++ >Pourquoi les parenthèses de constructeur facultatives sont-elles autorisées dans les initialiseurs d'objets C# ?
La raison pour laquelle l'initialiseur d'objet C# permet d'omettre les parenthèses du constructeur
C# 3.0 a introduit les initialiseurs d'objet, dont la syntaxe facultative permet d'omettre les parenthèses dans le constructeur dans les cas où le constructeur a un constructeur sans paramètre. Comme l'explique Mads Torgersen, ancien chef d'équipe du compilateur C#, cette fonctionnalité présente plusieurs avantages :
Considérations de conception :
Mise en œuvre technique :
Éviter toute ambiguïté :
Bien que les parenthèses puissent être omises dans les initialiseurs d'objet, elles sont toujours requises dans les expressions de création d'objet sans initialiseur d'objet. En effet, omettre les parenthèses dans ce cas peut créer une ambiguïté, comme dans l'exemple suivant :
<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>
Si vous omettez les crochets facultatifs sur la ligne 1, le compilateur ne peut pas déterminer s'il doit appeler le constructeur par défaut de C ou créer une nouvelle instance B.M. Cela entraînera une ambiguïté sémantique et des erreurs potentielles.
Les parenthèses facultatives des constructeurs sont donc limitées aux initialiseurs d'objets, où leur omission ne présente aucun risque pour la syntaxe ou la sémantique du langage.
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!