2013-08-15 4 views

risposta

164

Nell'interfaccia è possibile definire solo getter per la vostra proprietà

interface IFoo 
{ 
    string Name { get; } 
} 

Tuttavia, nella tua classe è possibile estenderla ad avere un private setter -

class Foo : IFoo 
{ 
    public string Name 
    { 
     get; 
     private set; 
    } 
} 
+1

Grazie, mi hai salvato –

+8

Per qualche motivo non posso MAI ricordarlo. Penso di essere atterrato su questa pagina tramite Google circa 13 volte nella mia carriera. LOL – Dan

+1

@Dan Non sei solo: D – Vahid

17

interfaccia definisce API pubblica. Se API pubblica contiene solo getter, allora si definisce solo getter Interfaccia:

public interface IBar 
{ 
    int Foo { get; }  
} 

setter privato non fa parte della API pubblica (come qualsiasi altro membro privato), quindi non è possibile definire in interfaccia. Ma sei libero di aggiungere qualsiasi membro (privato) per interfacciare l'implementazione. In realtà non importa se setter sarà attuato come pubblico o privato, o se ci sarà 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 non fa parte di interfaccia, in modo che non può essere chiamato tramite l'interfaccia:

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