ホーム>source

私はC#の初心者です。

クラスをインスタンス化するためにクラスにコンストラクターを作成するたびに。

<前>ウィズウィズ

しかし、今日私は私のために新しいバリアントを見ました

<前>ウィズウィズ

誰かが違いを説明できますか?

PS私の英語でごめんなさい。

class OtherClass { void Main() { MyClass myClass = new MyClass(); } } class MyClass { public string text; public int num; public MyClass() { text = "something"; num = 12; } }
あなたの答え
  • 解決した方法 # 1

    これは標準のC#です。クラスを作成し、プロパティに値を割り当てます。

    C#言語の仕様を読む必要があります。

    技術的にはこれは次と同じです:

    <前>ウィズウィズ

    単純な構文としてコード分析でVSが自動的に推奨する構文シュガー。

    ドキュメントの説明は「https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/object-and-collection-initializers」にあります

  • 解決した方法 # 2

    これはオブジェクト初期化子と呼ばれます。

  • 解決した方法 # 3

    1つ目は、ハードコードされた値のセットを持つコンストラクターです。したがって、それほど有用ではありません。コンストラクターで値を引数として取得する必要があります。それ以外のものはめったに役に立ちません。

    2つ目はオブジェクト初期化子です。これは配列イニシャライザと同様に機能しますが、これは単に作業の省略形/構文糖です。イニシャライザは、パブリック変数/セッターへの通常の割り当てのほんの一部です。

    コンストラクターのみが何かを書き込むことができる場合がいくつかあります(読み取り専用フィールド、プライベートフィールド、プライベートセッター)。オブジェクト初期化子はそれにアクセスできません。それは本当に省略形です。

    混乱する2番目の問題は、暗黙のコンストラクタ。コンストラクターを指定しない場合、パラメーターのない暗黙的なコンストラクターが自動的に作成されます。これは、コンストラクタを定義すると消えます。その場合は、欲しいです 自動のものはもうありません。場合によっては、意図的にパラメーターのないコンストラクターやパブリックコンストラクターさえありません。あなたの場合

    <前>ウィズウィズ

    絶対にパラメーターなしのコンストラクター var myClass = new MyClass (); myCVlass.num = 12; myClass.text = "something";

    class MyClass { public string text; public int num; }

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ python - boto3はサービスごとに利用可能なアクションを取得します