J'ai créé une interface avec certaines propriétés.
Si l'interface n'existait pas, toutes les propriétés de l'objet de classe seraient définies sur
{ get; private set; }
Cependant, ceci n'est pas autorisé lors de l'utilisation d'une interface. Cela peut donc être réalisé et si oui, comment?
Dans l'interface, vous ne pouvez définir que getter
pour votre propriété
interface IFoo
{
string Name { get; }
}
Cependant, dans votre classe, vous pouvez l’étendre pour avoir un private setter
-
class Foo : IFoo
{
public string Name
{
get;
private set;
}
}
L'interface définit l'API publique. Si l'API publique ne contient que le getter, vous ne définissez que le getter dans l'interface:
public interface IBar
{
int Foo { get; }
}
Le poseur privé ne fait pas partie de l'API publique (comme tout autre membre privé), vous ne pouvez donc pas le définir dans l'interface. Mais vous êtes libre d'ajouter n'importe quel membre (privé) à la mise en œuvre de l'interface. En réalité, peu importe si le setter sera implémenté en tant que public ou privé ou s'il y aura un 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 ne fait pas partie de l'interface, il ne peut donc pas être appelé via votre interface:
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