Lo llevaría un paso más allá y lo llevaría a 3 casos. Aunque hay variaciones en cada una, esta es la regla que uso la mayoría del tiempo cuando programo C #.
En el caso 2 y 3, siempre vaya al Accesor de propiedades (no a la variable de campo). Y en el caso 1, se salvará incluso de tener que hacer esta elección.
1.) Propiedad inmutable (pasada al constructor, o creada en tiempo de construcción). En este caso, utilizo una variable de campo, con una propiedad de solo lectura. Elijo esto en lugar de 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, solo usaría una propiedad automática.
public class Abc
{
public int Foo {get; set;}
}
3.) ViewModel propiedades de enlace. Para las clases que admiten INotifyPropertyChanged, creo que necesitas una variable de campo de respaldo privada.
public class Abc : INotifyPropertyChanged
{
private int foo;
public int Foo
{
get { return foo; }
set { foo = value; OnPropertyChanged("foo"); }
}
}