【C#】プロパティの「init;」ってなんぞ?

C#

プロパティの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;」にしておくと安全です。

コメント