【C#】プロパティとフィールドの違い

C# のクラス設計では「プロパティ」と「フィールド」を正しく使い分けることが重要です。どちらもデータを保持するために使われますが、役割や性質に違いがあります。本記事ではプロパティとフィールドの違いを整理し、適切な使いどころを解説します。

フィールドとは?

フィールドはクラスや構造体の中で直接データを保持する変数です。外部から直接アクセス可能にするとデータの整合性を壊す危険があるため、通常は private にして内部的に利用します。

class Person
{
    // フィールド(通常はprivateにする)
    private string name;
    private int age;
}

フィールドはシンプルですが、直接公開すると「不正な値の代入」を防げません。

プロパティとは?

プロパティはフィールドの値を外部から安全に参照・変更するための仕組みです。内部ではフィールドを利用しつつ、get アクセサと set アクセサで読み取りや書き込みのルールを定義できます。

class Person
{
    private string name;
    private int age;

    // プロパティ
    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public int Age
    {
        get { return age; }
        set
        {
            if (value >= 0) age = value; // 不正な値を防ぐ
        }
    }
}

プロパティを使うことで、データのカプセル化やバリデーションを行えます。

自動実装プロパティ

C# では簡単にプロパティを定義できる「自動実装プロパティ」も用意されています。内部的に匿名フィールドが生成されます。

class Product
{
    public string Name { get; set; }
    public int Price { get; set; }
}

特に特別な処理をしない場合は、自動実装プロパティを使うのが一般的です。

プロパティとフィールドの違い

項目 フィールド プロパティ
定義方法 変数として定義 get/set アクセサで定義
カプセル化 できない(直接アクセス) 可能(バリデーション・処理を追加できる)
アクセス修飾 通常 private public にして外部公開するのが一般的
用途 内部的にデータを保持する変数 外部と安全にデータをやり取りする窓口

使い分けのポイント

  • クラス内部だけで使うデータ … フィールド
  • 外部に公開する必要があるデータ … プロパティ
  • 単純な保持だけなら 自動実装プロパティ を使う
  • 値の検証や処理を加えたい場合は get/set をカスタマイズ する

まとめ

フィールドはクラス内部のデータ保持用、プロパティは外部とやり取りするための窓口です。外部に公開する際にはフィールドを直接使わず、プロパティを通じて安全にアクセスさせるのが基本です。C# の設計において両者を正しく使い分けることで、保守性の高いコードを実現できます。