Vorrei fare un ulteriore passo avanti e portarlo a 3 casi. Anche se ci sono delle variazioni su ognuna, queste sono le regole che uso la maggior parte delle volte durante la programmazione in C #.
Nel caso 2 e 3, vai sempre all'accessorio della proprietà (non alla variabile di campo). E nel caso 1, sei salvato anche dal dover fare questa scelta.
1.) Proprietà immutabile (passata al costruttore o creata in fase di costruzione). In questo caso, utilizzo una variabile di campo, con una proprietà di sola lettura. Scelgo questo su un setter privato, dal momento che un setter privato non garantisce l'immutabilità.
public class Abc
{
private readonly int foo;
public Abc(int fooToUse){
foo = fooToUse;
}
public int Foo { get{ return foo; } }
}
2.) Variabile POCO. Una variabile semplice che può essere / impostata in qualsiasi ambito pubblico / privato. In questo caso, utilizzerei solo una proprietà automatica.
public class Abc
{
public int Foo {get; set;}
}
3.) Proprietà di associazione ViewModel. Per le classi che supportano INotifyPropertyChanged, penso che tu abbia bisogno di una variabile di backinging privata.
public class Abc : INotifyPropertyChanged
{
private int foo;
public int Foo
{
get { return foo; }
set { foo = value; OnPropertyChanged("foo"); }
}
}