2013-08-15 11 views

Odpowiedz

164

W interfejsie można zdefiniować tylko getter dla nieruchomości

interface IFoo 
{ 
    string Name { get; } 
} 

Jednak w swojej klasie można przedłużyć go mieć private setter -

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

Dzięki, uratowałeś mnie –

+8

Z jakiegoś powodu NIGDY tego nie pamiętam. Wydaje mi się, że trafiłem na tę stronę przez Google około 13 razy w mojej karierze. LOL – Dan

+1

@Dan Nie jesteś sam: D – Vahid

17

Interfejs API definiuje publiczną. Jeśli API publicznych zawiera tylko getter, a następnie zdefiniować tylko getter w interfejsie:

public interface IBar 
{ 
    int Foo { get; }  
} 

Prywatna seter nie jest częścią publicznych API (jak każdy inny członek prywatnego), a tym samym nie można zdefiniować go w interfejsie. Ale możesz dodać dowolnych (prywatnych) członków do implementacji interfejsu. Właściwie to nie ma znaczenia, czy seter będzie realizowany jako publiczne lub prywatne, lub jeśli nie będzie seter:

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 

Seter nie jest częścią interfejsu, więc to nie może być wywołana za pośrednictwem interfejsu:

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 
Powiązane problemy