rksoftware

Visual Studio とか C# とかが好きです

C# 12 の新機能の確認 「 プライマリ コンストラクター 」

そろそろ C# 12 の時期なので予習を始めなければなりません。
今回は 「 プライマリ コンストラクター 」 を確認してみましょう。

■ プライマリ コンストラクター

learn.microsoft.com
クラスの型名の後ろに引数を書くとその引数をもつプライマリなコンストラクターが作成されます。
以前から record で使えていましたが、普通の class でできます。ただし少し挙動が違います。

Console.WriteLine(new Test("saitama1").Name);  // こういう風に使える
// Console.WriteLine(new Test().Name);         // これは書けない 引数無しのコンストラクタは存在しない
// Console.WriteLine(new Test("saitama3").name);  // これは書けない 引数はプロパティにならない
Console.WriteLine(new TestNoArg().Name);       // 他のコンストラクター
Console.WriteLine(new TestRecord("saitama5").Name);
Console.WriteLine(new TestRecord("saitama6").name);   // record では引数はプロパティになる

// C# 12 の新機能
class Test(string name)  // 文字列一つを引数にとるコンストラクタ
{
    public string Name => name; // クラス内でプライマリ コンストラクタの引数が参照できる
}

// プライマリ コンストラクターの他にコンストラクターを作る場合は、this(...) でプライマリ コンストラクターを呼ぶ
class TestNoArg(string name)
{
    public TestNoArg() : this("saitama4") {; }   // 他のコンストラクターを作る場合は、this(...) でプライマリ コンストラクターを呼ぶ
    public string Name => name;
}

// record では以前から使えた
record TestRecord(string name)
{
    public string Name => name;
}