c# - interfaces - ¿Cómo se implementa un setter privado cuando se usa una interfaz?
implementacion de interfaces c# (2)
Creé una interfaz con algunas propiedades.
Si la interfaz no existiera, todas las propiedades del objeto de clase se establecerían en
{get; private set; }
Sin embargo, esto no está permitido cuando se utiliza una interfaz, por lo que se puede lograr y, en caso afirmativo, ¿cómo?
En la interfaz puede definir solo getter
para su propiedad
interface IFoo
{
string Name { get; }
}
Sin embargo, en tu clase puedes extenderlo para tener un private setter
class Foo : IFoo
{
public string Name
{
get;
private set;
}
}
La interfaz define la API pública. Si la API pública contiene solo getter, entonces usted solo define getter en la interfaz:
public interface IBar
{
int Foo { get; }
}
Private setter no forma parte de una API pública (como cualquier otro miembro privado), por lo que no se puede definir en la interfaz. Pero puede agregar miembros (privados) a la implementación de la interfaz. En realidad, no importa si el organismo implementador se implementará como público o privado, o si existirá alguien que lo establezca:
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