クラス フィールドを外部に公開するのではなく、クラス フィールドの getter メソッドと setter メソッド (C# ではプロパティ) を作成してカプセル化を保護する必要があるとよく言われます。
しかし、フィールドは単に値を保持するためだけに存在し、取得や設定に計算を必要としないことがよくあります。これらの場合は、次のようにします。
public class Book
{
private string _title;
public string Title
{
get => _title;
set => _title = value;
}
}
正直に言うと、私はこれらすべてを書くのに耐えられなかったのです (実際、書かなければならなかったのではなく、見なければならなかったのです)。そこで、私は反抗してパブリック フィールドを使用しました。
その後、C# 3.0 が登場し、自動プロパティが追加されたことがわかります。
public class Book
{
public string Title { get; set; }
}
どちらの方がすっきりしていて、ありがたいのですが、実際のところ、単にパブリック フィールドを作成するのと何が違うのでしょうか?
public class Book
{
public string Title;
}
ベストアンサー1
で関連する質問少し前に、ジェフのブログにいくつかの違いを説明する投稿へのリンクがありました。
- リフレクションは変数とプロパティで動作が異なるため、リフレクションを使用する場合は、すべてのプロパティを使用する方が簡単です。
- 変数に対してデータバインドすることはできません。
変数をプロパティに変更することは、破壊的な変更です。例:
TryGetTitle(out book.Title); // requires a variable