さらに一歩進んで、3つのケースに持ち込みます。それぞれにバリエーションがありますが、これは私がC#プログラミングの際にほとんどの場合に使用するルールです。
ケース2と3の場合は、常にプロパティアクセサーに移動します(フィールド変数ではありません)。ケース1では、この選択をしなくても済むようになります。
1.)不変のプロパティ(コンストラクターに渡されるか、構築時に作成される)。この場合、読み取り専用プロパティを持つフィールド変数を使用します。プライベートセッターは不変性を保証しないため、プライベートセッターよりもこれを選択します。
public class Abc
{
private readonly int foo;
public Abc(int fooToUse){
foo = fooToUse;
}
public int Foo { get{ return foo; } }
}
2.)POCO変数。任意のパブリック/プライベートスコープで取得/設定できる単純な変数。この場合、自動プロパティを使用します。
public class Abc
{
public int Foo {get; set;}
}
3.)ViewModelバインディングプロパティ。INotifyPropertyChangedをサポートするクラスの場合、プライベートのバッキングフィールド変数が必要だと思います。
public class Abc : INotifyPropertyChanged
{
private int foo;
public int Foo
{
get { return foo; }
set { foo = value; OnPropertyChanged("foo"); }
}
}