Lo llevaría un paso más allá y lo llevaría a 3 casos. Aunque hay variaciones en cada uno, estas son las reglas que uso la mayoría de las veces cuando programo C #.
En los casos 2 y 3, vaya siempre al Accesor de propiedades (no a la variable de campo). Y en el caso 1, se salva incluso de tener que tomar esta decisión.
1.) Propiedad inmutable (pasada al constructor, o creada en tiempo de construcción). En este caso, uso una variable de campo, con una propiedad de solo lectura. Elijo esto sobre un setter privado, ya que un setter privado no garantiza la inmutabilidad.
public class Abc
{
private readonly int foo;
public Abc(int fooToUse){
foo = fooToUse;
}
public int Foo { get{ return foo; } }
}
2.) variable POCO. Una variable simple que puede obtener / establecer en cualquier ámbito público / privado. En este caso, simplemente usaría una propiedad automática.
public class Abc
{
public int Foo {get; set;}
}
3.) Propiedades de enlace de ViewModel. Para las clases que admiten INotifyPropertyChanged, creo que necesita una variable de campo de respaldo privado.
public class Abc : INotifyPropertyChanged
{
private int foo;
public int Foo
{
get { return foo; }
set { foo = value; OnPropertyChanged("foo"); }
}
}