C# オブジェクト初期化子でコンストラクターの括弧を省略できる理由
C# 3.0 では、オブジェクト初期化子が導入されました。このオプションの構文では、コンストラクターにパラメーターのないコンストラクターがある場合に、コンストラクター内の括弧を省略できます。元 C# コンパイラ チーム リーダーの Mads Torgersen 氏は、この機能にはいくつかの利点があると説明しています。
設計上の考慮事項:
技術実装:
曖昧さを避ける:
オブジェクト初期化子では括弧を省略できますが、オブジェクト初期化子を使用しないオブジェクト作成式では括弧は依然として必要です。これは、次の例のように、この場合かっこを省略するとあいまいさが生じる可能性があるためです:
<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>
1 行目のオプションのかっこを省略すると、コンパイラーは C のデフォルトのコンストラクターを呼び出すか、新しい B.M インスタンスを作成するかを決定できません。これにより、意味上のあいまいさが生じ、潜在的なエラーが発生します。
したがって、オプションのコンストラクターの括弧はオブジェクト初期化子に限定され、省略しても言語の構文やセマンティクスにリスクが生じることはありません。
以上がC# オブジェクト初期化子でオプションのコンストラクターの括弧が許可されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。