Wann sind Delegaten Schnittstellen vorzuziehen? (C#-Programmierhandbuch)

Sowohl Delegaten als auch Schnittstellen ermöglichen es einem Klassendesigner, Typdeklarationen und Implementierung voneinander zu trennen. Eine bestimmte Schnittstelle kann von jeder Klasse oder Struktur geerbt und implementiert werden. Ein Delegat kann für eine Methode jeder beliebigen Klasse erstellt werden, solange die Methode mit der Methodensignatur des Delegaten übereinstimmt. Ein Schnittstellenverweis oder ein Delegat kann von jedem Objekt verwendet werden, ohne über Informationen zu der Klasse zu verfügen, die die Schnittstelle oder die Delegatmethode implementiert. Wann sollte ein Klassendesigner in Anbetracht dieser Gemeinsamkeiten einen Delegaten verwenden, und wann sollte eine Schnittstelle verwendet werden?

Verwenden Sie Delegaten, wenn

  • ein Ereignisentwurfsmuster verwendet wird.

  • eine statische Methode gekapselt werden soll.

  • der Aufrufer keinen Zugriff auf weitere Eigenschaften, Methoden oder Schnittstellen des Objekts benötigt, das die Methode implementiert.

  • die einfache Verknüpfung von Delegaten gewünscht ist.

  • eine Klasse möglicherweise mehr als eine Implementierung der Methode benötigt.

Verwenden Sie Schnittstellen, wenn

  • es eine Gruppe verwandter Methoden gibt, die möglicherweise aufgerufen werden.

  • eine Klasse nur eine Implementierung der Methode benötigt.

  • die Klasse, die die Schnittstelle verwendet, eine Umwandlung dieser Schnittstelle in andere Schnittstellen oder Klassentypen durchführt.

  • die Methode, die implementiert wird, mit dem Typ oder der Identität der Klasse verknüpft ist, wie zum Beispiel bei Vergleichsmethoden.

Ein gutes Beispiel für die Verwendung einer Schnittstelle mit nur einer Methode anstatt eines Delegaten ist IComparable oder die generische Version IComparable<T>. IComparable deklariert die CompareTo-Methode, die eine ganze Zahl zurückgibt, mit der ein Kleiner-als-, Gleich- oder Größer-als-Verhältnis zwischen zwei Objekten desselben Typs angegeben wird. IComparable kann als Grundlage für einen Sortieralgorithmus verwendet werden. Die Verwendung einer Delegatenvergleichsmethode als Grundlage für den Sortieralgorithmus ist zwar möglich, aber nicht optimal. Da die Vergleichsfunktionalität zu einer Klasse gehört und der Vergleichsalgorithmus zur Laufzeit nicht geändert wird, stellt eine Schnittstelle mit nur einer Methode die ideale Lösung dar.

Siehe auch

Verweis

Ereignisse (C#-Programmierhandbuch)

Methoden (C#-Programmierhandbuch)

Schnittstellen (C#-Programmierhandbuch)

Konzepte

C#-Programmierhandbuch