1. ホーム
  2. c#

[解決済み] パブリックフィールドとオートマチックプロパティ

2022-03-24 22:19:11

質問

よく、クラスのフィールドにゲッターとセッターのメソッド(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;
}

解決方法は?

関連質問 以前、私が投稿したジェフのブログには、いくつかの違いについて説明した記事へのリンクがありました。

プロパティとパブリック変数の比較

  • リフレクションは変数とプロパティで動作が異なるので、リフレクションに依存する場合は、すべてのプロパティを使用する方が簡単です。
  • 変数に対してデータバインドができない。
  • 変数をプロパティに変更することは、ブレークチェンジになります。例えば

    TryGetTitle(out book.Title); // requires a variable