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# の設計において両者を正しく使い分けることで、保守性の高いコードを実現できます。