C# 3.0 でオブジェクト初期化コンストラクターにオプションの括弧が導入された理由は何ですか?
C# 3.0 では、構文上の糖衣として、パラメーターのないコンストラクターが存在する場合、オブジェクト初期化子のコンストラクター呼び出しでかっこを省略できます。例:
<code class="language-c#">var x = new XTypeName { PropA = value, PropB = value }; // 括号可选</code>
括弧がオプションの理由
C# チームは、次の考慮事項に基づいて括弧をオプションにすることを決定しました:
すべてのデフォルトのコンストラクター呼び出しで括弧をオプションにしないのはなぜですか?
一般的にオプションの括弧を導入すると、次の例のように意味上の曖昧さが生じる可能性があります:
<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>
この場合、行 1 は C のデフォルト コンストラクターを呼び出してからインスタンス メソッド M を呼び出し、行 2 は B.M の新しいインスタンスを作成してそのデフォルト コンストラクターを呼び出します。 1 行目で括弧をオプションにするとあいまいさが生じ、コンパイラーはそれを解決するために複雑なルールを導入する必要があります。この場合、この追加の複雑さによる潜在的なコストが、オプションの括弧の利点を上回ります。
以上がC# 3.0 オブジェクト初期化子コンストラクターでかっこが省略可能なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。