(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Schnittstellen (C#-Programmierhandbuch)

Eine Schnittstelle enthält Definitionen für eine Gruppe verwandter Funktionalitäten, die von - Klasse oder Struktur implementiert werden kann.

Mithilfe von Schnittstellen können Sie beispielsweise das Verhalten aus mehreren Quellen in einer Klasse vereinen. Diese Funktion ist in C# wichtig, da die Sprache Mehrfachvererbung von Klassen nicht unterstützt. Außerdem müssen Sie eine Schnittstelle verwenden, wenn Sie Vererbung für Strukturen simulieren möchten, da sie nicht von einer anderen Klasse oder Struktur tatsächlich erben können.

Sie definieren eine Schnittstelle, indem Sie das Schlüsselwort interface, wie im folgenden Beispiel gezeigt, verwenden.


interface IEquatable<T>
{
    bool Equals(T obj);
}


Jede Klasse oder Struktur, die die IEquatable<T>-Schnittstelle implementiert, muss eine Definition für eine Equals-Methode enthalten, die mit der Signatur übereinstimmt, die die Schnittstelle angibt. Daher können Sie sich bei einer Klasse, die IEquatable<T> implementiert, darauf verlassen, dass sie eine Equals-Methode enthält, mit der eine Instanz der Klasse bestimmen kann, ob sie gleich zu einer anderen Instanz derselben Klasse ist.

Die Definition von IEquatable<T> stellt keine Implementierung für Equals bereit. Die Schnittstelle definiert nur die Signatur. In dieser Beziehung ähnelt eine Schnittstelle in C# einer abstrakten Klasse, in der alle Methoden als abstrakt deklariert sind. Sie können jedoch für eine Klasse oder Struktur mehrere Schnittstellen implementieren, aber eine Klasse kann nur von einer einzelnen Klasse erben. Dabei ist es unerheblich, ob die Oberklasse abstrakt oder konkret ist. Durch die Verwendung von Schnittstellen können Sie das Verhalten aus mehreren Quellen in einer Klasse aufnehmen.

Weitere Informationen zu abstrakten Klassen, finden Sie unter Abstrakte und versiegelte Klassen und Klassenmember.

Schnittstellen können Methoden, Eigenschaften, Ereignisse, Indexer oder eine beliebige Kombination dieser Elemente enthalten. Links zu Beispielen finden Sie unter Verwandte Abschnitte. Eine Schnittstelle kann keine Konstanten, Felder, Operatoren, Instanzkonstruktoren, Destruktoren oder Typen enthalten. Schnittstellenmember sind automatisch öffentlich und können keine Zugriffsmodifizierer enthalten. Member dürfen auch nicht statisch sein.

Um einen Schnittstellenmember zu implementieren, muss der zugehörige Member der implementierenden Klasse öffentlich, nicht statisch sein sowie über denselben Namen und Signatur wie der Schnittstellenmember verfügen.

Wenn eine Klasse oder Struktur eine Schnittstelle implementiert, müssen die Klasse oder Struktur eine Implementierung für alle Member der Schnittstelle bereitstellen. Die Schnittstelle selbst stellt keine Funktionalität bereit, die eine Klasse oder Struktur direkt erben könnte, so wie es beim Erben der Funktionalität einer Basisklasse der Fall ist. Wurde in einer Basisklasse eine Schnittstelle implementiert, erbt auch jede davon abgeleitete Klasse diese Implementierung.

Im folgenden Beispiel wird eine Implementierung der Schnittstelle IEquatable<T> gezeigt. Die implementierende Klasse, Car, muss eine Implementierung der - Methode Equals bereitstellen.


public class Car : IEquatable<Car>
{
    public string Make {get; set;}
    public string Model { get; set; }
    public string Year { get; set; }

    // Implementation of IEquatable<T> interface
    public bool Equals(Car car)
    {
        if (this.Make == car.Make &&
            this.Model == car.Model &&
            this.Year == car.Year)
        {
            return true;
        }
        else
            return false;
    }
}


Eigenschaften und Indexer einer Klasse können zusätzliche Accessoren für eine Eigenschaft oder einen Indexer definieren, der in einer Schnittstelle definiert wird. Beispielsweise kann eine Schnittstelle deklarierte eine Eigenschaft, die einen rufen Sie ab - Accessor verfügt. Die Klasse, die die Schnittstelle implementiert, kann die gleiche Eigenschaft für einen get und set Accessor deklarieren. Wenn die Eigenschaft oder der Indexer jedoch explizite Implementierung verwendet, müssen die Accessoren übereinstimmen. Weitere Informationen zur expliziten Implementierung, finden Sie unter Explizite Schnittstellenimplementierung (C#-Programmierhandbuch) und Schnittstelleneigenschaften (C#-Programmierhandbuch).

Schnittstellen können andere Schnittstellen implementieren. Eine Klasse kann eine Schnittstelle mehrmals enthalten, wenn sie durch Basisklassen vererbt wurde oder durch Schnittstellen, die wiederum andere Schnittstellen implementieren. Allerdings kann die Klasse eine Implementierung einer Schnittstelle nur einmal bereitstellen und nur wenn die Klasse die Schnittstelle als Teil der Definition der Klasse (class ClassName : InterfaceName) deklariert. Wenn die Schnittstelle geerbt wird, weil eine Basisklasse geerbt wurde, die die Schnittstelle implementiert, stellt die Basisklasse die Implementierung der Member bereit. Die abgeleitete Klasse kann jedoch die Schnittstellenmember erneut implementieren, anstatt die geerbte Implementierung zu verwenden.

Eine Basisklasse kann auch Schnittstellenmember implementieren, indem sie virtuelle Member verwendet. In diesem Fall kann eine abgeleitete Klasse das Schnittstellenverhalten ändern, indem sie die virtuellen Member überschreibt. Weitere Informationen zu virtuellen Membern finden Sie unter Polymorphismus.

Eine Schnittstelle verfügt über folgende Eigenschaften:

  • Eine Schnittstelle ist wie eine abstrakte Basisklasse. Jede Klasse oder Struktur, die die Schnittstelle implementiert, muss alle Member implementieren.

  • Eine Schnittstelle kann nicht direkt instanziiert werden. Seine Member werden von jeder Klasse oder Struktur implementiert, die die Schnittstelle implementiert.

  • Schnittstellen können Ereignisse, Indexer, Methoden und Eigenschaften enthalten.

  • Schnittstellen enthalten keine Implementierung von Methoden.

  • Eine Klasse oder Struktur kann mehrere Schnittstellen implementieren. Eine Klasse kann von einer Basisklasse erben und auch eine oder mehrere Schnittstellen implementieren.

Explizite Schnittstellenimplementierung (C#-Programmierhandbuch)

Erläutert, wie ein Klassenmember erstellt wird, der spezifisch für eine Schnittstelle ist.

Gewusst wie: Explizites Implementieren von Schnittstellenmembern (C#-Programmierhandbuch)

Zeigt ein Beispiel, wie Member von Schnittstellen explizit implementiert werden.

Gewusst wie: Explizites Implementieren von Membern zweier Schnittstellen (C#-Programmierhandbuch)

Zeigt ein Beispiel, wie Member von Schnittstellen durch Vererbung explizit implementiert werden.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft