rksoftware

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

C# 2.0 以降の新機能の確認 - C# 9.0 - init 専用セッター

C# 2.0 以降の新機能を一つづつ確認していきます。
以前に一度行ったのですが、公式ドキュメント再編でリンク切れしているところを見つけてしまったので。今ならもっと簡潔なサンプルが欠けるところもあるだろうし、せっかくなので今もう一度確認して行きます。

init 専用セッター

 https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/init
 初期化時にだけ値をセットできる素敵なプロパティを作れます。もっとわかりやすく簡単に言うと、イミュータブルなオブジェクトが作れる。
 初期化とは
 ・コンストラクタ
 ・初期化子 ( new XXXX { プロパティ名 = 値} )
 ・with 式 ( 型名 新しい変数 = 変数 with { プロパティ名 = 値 }; )

var saitama1 = new Saitama { InitProperty = "" };   // これはエラーにならない。初期化専用なので。うれしい
var saitama2 = saitama1 with { InitProperty = "" }; // これはエラーにならない。初期化専用なので。うれしい
//saitama2.InitProperty = "";                       // これはエラー。初期化専用なので。うれしい

public record Saitama
{
    // プロパティの宣言で普段 set と書いている所を init と書くと使える
    public string InitProperty { get; init; }
    public Saitama() => InitProperty = "value5";
}