Schnittstellenentwurf
Eine Schnittstelle definiert die Signaturen für einen Satz von Membern, den Implementierer bereitstellen müssen. Schnittstellen können keine Implementierungsdetails für die Member bereitstellen. Beispielsweise definiert die ICollection-Schnittstelle Member für das Arbeiten mit Auflistungen. Jede konkrete Klasse, die die Schnittstelle implementiert, muss die Implementierungsdetails für diese Member bereitstellen. Klassen können zwar nur von einer einzelnen Klasse erben, doch sie können mehrere Schnittstellen implementieren. Anhand der folgenden Richtlinien können Sie den ordnungsgemäßen Entwurf von Schnittstellen sicherstellen.
Definieren Sie eine Schnittstelle, wenn eine allgemeine Funktionalität von einem Satz von Typen unterstützt werden muss, der einige Werttypen umfasst.
Werttypen müssen von ValueType erben. Aus diesem Grund kann ein Vertrag für Werttypen nicht mit abstrakten Klassen angegeben werden, sondern es müssen Schnittstellen verwendet werden.
Definieren Sie eine Schnittstelle, wenn Sie ihre Funktionalität für Typen unterstützen müssen, die bereits von einem anderen Typ erben.
Verwenden Sie keine Markerschnittstellen (Schnittstellen ohne Member).
Ein Typ kann mit benutzerdefinierten Attributen markiert werden. Weitere Informationen über benutzerdefinierte Attribute finden Sie unter Verfassen von benutzerdefinierten Attributen. Benutzerdefinierte Attribute sind die bessere Lösung, wenn das Attribut erst bei der Ausführung des Codes überprüft werden muss. Wenn das Szenario eine Überprüfung zur Kompilierzeit erfordert, können Sie diese Richtlinie nicht einhalten.
Stellen Sie mindestens einen Typ bereit, der eine Implementierung einer Schnittstelle ist.
Dies trägt zu einem guten Entwurf der Schnittstelle bei und kann relativ einfach implementiert werden. Die Int32-Klasse stellt eine Implementierung für die IComparable-Schnittstelle bereit.
Stellen Sie mindestens einen Member bereit, der jede von Ihnen definierte Schnittstelle verwendet (z. B. eine Methode, die die Schnittstelle als Parameter akzeptiert, oder eine als die Schnittstelle typisierte Eigenschaft).
Dies ist ein weiterer Mechanismus, der zu einem guten Entwurf der Schnittstelle beiträgt und relativ einfach verwendet werden kann.
Fügen Sie einer Schnittstelle keine Member hinzu, die bereits veröffentlicht wurden.
Durch das Hinzufügen neuer Member wird die Konsistenz des Codes zerstört, der die vorherige Version der Schnittstelle implementiert hat. Dies ist einer der vielen Gründe, aus denen Klassen im Allgemeinen und nach Möglichkeit Schnittstellen vorzuziehen sind. Weitere Informationen finden Sie unter Auswählen zwischen Klassen und Schnittstellen.
Wenn die veröffentliche Definition der Schnittstelle zusätzliche Member erfordert, können Sie eine neue Schnittstelle und die entsprechenden Member zum Verwenden der Schnittstelle implementieren.
Copyright für einzelne Teile 2005 Microsoft Corporation. Alle Rechte vorbehalten.
Copyright für einzelne Teile Addison-Wesley Corporation. Alle Rechte vorbehalten.
Weitere Informationen zu Entwurfsrichtlinien finden Sie unter „Framework-Entwurfs-Richtlinien: Idiome, Konventionen und Muster für wiederverwendbare .NET-Bibliotheken von Krzysztof Cwalina“ book und Brad Abrams, veröffentlicht von Addison-Wesley, 2005.
Siehe auch
Konzepte
Auswählen zwischen Klassen und Schnittstellen