2016-05-09 16 views
0

Ich bin auf der Suche nach einer E-Mail-Bibliothek zu implementieren, die eine grundlegende SMTP-E-Mail mit To, From und Message senden. Ich möchte einen Interface erstellen, damit ich den E-Mail-Dienst, der das Senden der E-Mail verarbeitet, ausschaltet.Warum enthält eine Schnittstelle keine Eigenschaften

Meine Frage hat mit der Erstellung der Schnittstelle zu tun. Welche konkrete Klasse, die das Senden der Nachricht behandelt, benötigt einige Daten wie To, From und Message, sollte das Interface diese Eigenschaften nicht auch haben?

Mit Blick auf andere Beispiele auf SO und in anderen Artikeln scheint es, dass Eigenschaften in der Interface normalerweise nicht angegeben werden. Warum das?

// Interface 
public Interface ISendMail 
{ 
    string to {get; set;} 
    string from {get; set;} 
    string message {get; set;} 
    bool SendMessage(); 
} 

Im Gegensatz ...

// Interface 
public Interface ISendMail 
{ 
    bool SendMessage(); 
} 
+2

Ich denke, Sie müssen die Quellen auflisten. Abgesehen von dem Tippfehler in "Interface", und in der Regel Großschreibung Eigentum Namen, scheint es mir gut. –

Antwort

4

es scheint, dass Eigenschaften in der Regel nicht in der Schnittstelle spezifiziert

, was falsch ist. Es gibt viele Schnittstellen, die Eigenschaften haben. Nehmen Sie beispielsweise die Interop-Schnittstellen für Office-Add-Ins. Sie sind damit beladen.

Es gibt sogar ein ganzes Thema auf MSDN.

+0

Korrekt, siehe: https://msdn.microsoft.com/en-us/library/64syzecx.aspx – Cortright

+0

Whoops, muss meine "immer nah an 5pm Farbenblindheit" sein, die mich den Link @Pat verpassen! – Cortright

2

Schnittstellen in C# können Eigenschaften enthalten. Aus dem Abschnitt 1.9 der C# Language Specification (Schwerpunkt ist meins):

Eine Schnittstelle definiert einen Vertrag, der durch Klassen und Strukturen implementiert werden kann. Eine Schnittstelle kann Methoden, Eigenschaften, Ereignisse und Indexer enthalten. Eine Schnittstelle stellt keine Implementierungen der von ihr definierten Member bereit. Sie gibt lediglich die Member an, die von Klassen oder Strukturen bereitgestellt werden müssen, die die Schnittstelle implementieren.

0

Es ist vollkommen in Ordnung, Eigenschaften in einer Schnittstelle zu haben. Ich betrachte sie als Methoden (sollte aber leicht sein). Zum Beispiel:

string Message { get; set; }

entspricht diese beiden Methoden

string GetMessage(); 
void SetMessage(string value); 

und hinzuzufügen, ohne automatisch implementierte Eigenschaften zu erklären, Sie müssen noch entsprechende Felder für Ihre Getter und Setter haben.

Verwandte Themen