160 votes

Comment implémenter un setter privé lorsqu'on utilise une interface ?

J'ai créé une interface avec quelques propriétés.

Si l'interface n'existait pas, toutes les propriétés de l'objet classe seraient définies comme suit

{ get; private set; }

Cependant, cela n'est pas autorisé lorsqu'on utilise une interface, alors est-ce que cela peut être réalisé et si oui, comment ?

311voto

Rohit Vats Points 36234

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;
    }
}

32voto

Sergey Berezovskiy Points 102044

L'interface définit l'API publique. Si l'API publique ne contient que des getter, alors vous ne définissez que des getter dans l'interface :

public interface IBar
{
    int Foo { get; }    
}

Le setter privé ne fait pas partie de l'API publique (comme tout autre membre privé), donc vous ne pouvez pas le définir dans l'interface. Mais vous êtes libre d'ajouter n'importe quel membre (privé) à l'implémentation de l'interface. En fait, il n'est pas important de savoir si le setter sera implémenté comme 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X