La interfaz define API pública. Si la API pública contiene solo getter, usted define solo getter en la interfaz:
public interface IBar
{
int Foo { get; }
}
El configurador privado no forma parte de la API pública (como cualquier otro miembro privado), por lo que no puede definirlo en la interfaz. Pero puede agregar cualquier miembro (privado) a la implementación de la interfaz. En realidad, no importa si el setter se implementará como público o privado, o si habrá setter:
public int Foo { get; set; } // public
public int Foo { get; private set; } // private
public int Foo
{
get { return _foo; } // no setter
}
public void Poop(); // this member also not part of interface
Setter no es parte de la interfaz, por lo que no se puede llamar a través de su interfaz:
IBar bar = new Bar();
bar.Foo = 42; // will not work thus setter is not defined in interface
bar.Poop(); // will not work thus Poop is not defined in interface