2013-08-15 8 views

Antwort

164

In-Schnittstelle können Sie nur getter für Ihre Immobilie definieren

interface IFoo 
{ 
    string Name { get; } 
} 

in Ihrer Klasse Allerdings können Sie es erweitern ein haben private setter -

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

Danke, du hast mich gerettet –

+8

Aus irgendeinem Grund kann ich mich nie daran erinnern. Ich glaube, ich bin 13 Mal in meiner Karriere über Google auf dieser Seite gelandet. LOL – Dan

+1

@Dan Du bist nicht alleine: D – Vahid

17

Schnittstelle public API definiert. Wenn die öffentliche API nur Getter enthält, dann definieren Sie nur Getter in-Schnittstelle:

public interface IBar 
{ 
    int Foo { get; }  
} 

Privat Setter ist nicht Teil der öffentlichen api (wie jedes andere private Mitglied), so können Sie es nicht in der Schnittstelle definieren. Sie können jedoch beliebige (private) Mitglieder zur Schnittstellenimplementierung hinzufügen. Eigentlich ist es egal, ob Setter wird als öffentlich oder privat durchgeführt werden, oder wenn es Setter sein wird:

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 ist nicht Teil der Schnittstelle, so kann es nicht über Ihre Schnittstelle aufgerufen werden:

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