私は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
- 解決した方法 # 2
これはオブジェクト初期化子と呼ばれます。
- 解決した方法 # 3
1つ目は、ハードコードされた値のセットを持つコンストラクターです。したがって、それほど有用ではありません。コンストラクターで値を引数として取得する必要があります。それ以外のものはめったに役に立ちません。
2つ目はオブジェクト初期化子です。これは配列イニシャライザと同様に機能しますが、これは単に作業の省略形/構文糖です。イニシャライザは、パブリック変数/セッターへの通常の割り当てのほんの一部です。
コンストラクターのみが何かを書き込むことができる場合がいくつかあります(読み取り専用フィールド、プライベートフィールド、プライベートセッター)。オブジェクト初期化子はそれにアクセスできません。それは本当に省略形です。
混乱する2番目の問題は、暗黙のコンストラクタ。コンストラクターを指定しない場合、パラメーターのない暗黙的なコンストラクターが自動的に作成されます。これは、コンストラクタを定義すると消えます。その場合は、欲しいです 自動のものはもうありません。場合によっては、意図的にパラメーターのないコンストラクターやパブリックコンストラクターさえありません。あなたの場合
<前>ウィズウィズ絶対にパラメーターなしのコンストラクター
var myClass = new MyClass (); myCVlass.num = 12; myClass.text = "something";
。class MyClass { public string text; public int num; }
これは標準のC#です。クラスを作成し、プロパティに値を割り当てます。
C#言語の仕様を読む必要があります。
技術的にはこれは次と同じです:
<前>ウィズウィズ単純な構文としてコード分析でVSが自動的に推奨する構文シュガー。
ドキュメントの説明は「https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/object-and-collection-initializers」にあります