プロパティのsetter部は基本的に「set;」ですが、「初期化時のみ設定可能」を表す「init;」にすることができます。
下記のコードのようにプロパティの「set;」を「init;」にすることで、インスタンスの生成時のみ値を設定できるようになります。逆に言うと、作成済みのインスタンスに対して「init;」が指定されたプロパティを利用した値の変更はできなくなります(コンパイルエラー)。
/// <summary>
/// ユーザー情報を表します
/// </summary>
public class UserInfo
{
/// <summary>
/// 名前
/// </summary>
public string Name { get; init; } = "No Name"; // 初期化(OK)
/// <summary>
/// 新しい UserInfo メソッドを作成します
/// </summary>
public UserInfo(string name)
{
this.Name = name; // コンストラクタでの設定(OK)
}
}
static void Main(string[] args)
{
UserInfo user1 = new UserInfo();
user1.Name = "村正"; // Nameプロパティのsetter部は「init;」であるためコンパイルエラー(NG)
Console.WriteLine($"名前:{user1.Name}");
}
途中で値を変えられたくないプロパティは「init;」にしておくと安全です。
コメント