C# で読み取り専用プロパティを実装する

Bilal Shahid 2023年10月12日
  1. C# で初期化するときに変数の読み取り専用プロパティを宣言する
  2. C# で単純な get プロパティを使用して読み取り専用プロパティを実装する
C# で読み取り専用プロパティを実装する

今日は、C# で読み取り専用プロパティを作成する方法を学習します。これにより、読み取りのみが可能になり、変更できなくなります。

C# で初期化するときに変数の読み取り専用プロパティを宣言する

最後の 2つの記事では、クラス CAR に取り組んできました。同じクラスを使用して、読み取り専用プロパティを実装してみましょう。クラス CAR に、セキュリティのために読み取り専用のままにしておきたい maker_id というプロパティがあるとします。

using System;

class CAR {
  private readonly int maker_id;

  public CAR(int maker_id) {
    this.maker_id = maker_id;
  }

  public int get_maker_id() {
    return maker_id;
  }
}

public class Program {
  static void Main(String[] args) {
    CAR x = new CAR(5);
    Console.WriteLine(x.get_maker_id());
  }
}

そのため、maker_id読み取り専用として宣言しました。上記を実行すると、出力は次のようになります。

5

したがって、maker_id フィールドに別のセッターを追加したいとします。次に、次のように実行できます。

public void set_maker_id(int maker_id) {
  this.maker_id = maker_id;
}

しかし、エラーがスローされることに気付くでしょう。

変数の C# 読み取り専用プロパティ-エラー

したがって、readonly プロパティでは、コンストラクター内の変数に値を 1 回だけ割り当てることができます。それ以外の場合は、アクセシビリティのためにエラーをスローし、変更を拒否する傾向があります。

完全なコードを以下に示します。

using System;

class CAR {
  private readonly int maker_id;

  public CAR(int maker_id) {
    this.maker_id = maker_id;
  }

  public void set_maker_id(int maker_id) {
    this.maker_id = maker_id;  // line ERROR
  }

  public int get_maker_id() {
    return maker_id;
  }
}

public class Program {
  static void Main(String[] args) {
    CAR x = new CAR(5);
    Console.WriteLine(x.get_maker_id());
  }
}

エラーはコードのコメントに記載されています。

C# で単純な get プロパティを使用して読み取り専用プロパティを実装する

maker_id プロパティは次のように記述できます。

private int maker_id { get; }

そして、次のように関数を書き込もうとした場合:

public void set_val(int val) {
  this.maker_id = val;
}

次のようなエラーが発生します。

C# GET を使用した読み取り専用プロパティ - エラー

したがって、get プロパティを設定すると、どのように読み取り専用になるかがわかります。完全なコードは次のとおりです。

using System;

class CAR {
  private int maker_id {
    get;
    set;
  }

  public CAR(int maker_id) {
    this.maker_id = maker_id;
  }
}

class Program {
  static void Main(String[] args) {
    CAR x = new CAR(5);
  }
}

これは規則に従うだけでなく、シリアライザーを破る傾向があります。また、変化せず、不変になる傾向があります。

get が何かを返すことを確認したい場合は、次のようにコードを作成します。

class CAR {
  public int maker_id {
    get { return maker_id; }
  }
}

これが、C# で読み取り専用を実装する方法です。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

関連記事 - Csharp Property