Schnittstellen (C#-Programmierhandbuch)

Eine Schnittstelle enthält Definitionen für eine Gruppe verwandter Funktionalitäten, die - Klasse oder Struktur implementieren können.

Mithilfe von Schnittstellen verwenden, können Sie Verhalten aus mehreren Quellen in einer Klasse zum Beispiel). Diese Funktion ist in C# wichtig, da die Sprache Mehrfachvererbung nicht von Klassen 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);
}

Alle, Klasse oder Struktur, die die IEquatable-Schnittstelle implementiert, muss eine Definition für eine Equals-Methode enthalten, die die Signatur übereinstimmt, die die - Schnittstelle angibt. Daher können Sie in einer Klasse zählen, die IEquatable<T> implementiert, um eine Equals-Methode zu enthalten, mit der eine Instanz der - Klasse bestimmen kann, ob sie gleich eine andere Instanz derselben Klasse ist.

Die Definition von IEquatable<T> stellt eine Implementierung nicht für Equals bereit. Die - Schnittstelle definiert nur die Signatur. Auf diese Weise kann eine Schnittstelle in C# zu einer abstrakten Klasse, in der alle Methoden als abstrakt deklariert sind. Sie können jedoch eine Klasse oder Struktur mehrere Schnittstellen implementieren, aber eine Klasse kann nur eine einzelne Klasse, Zusammenfassung erben oder nicht. Daher indem Sie Schnittstellen verwenden, können Sie Verhalten aus mehreren Quellen in einer Klasse einschließen.

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 vierköpfigen Typen enthalten. Für Links zu Beispielen, finden Sie unter Verwandte Abschnitte. Eine Schnittstelle kann Operatoren, Konstanten, Felder, Instanzkonstruktoren, Destruktoren oder Typen enthalten. Schnittstellenmember sind automatisch öffentlich und können keine Zugriffsmodifizierer enthalten. Member können nicht statisch auch sein.

Um einen Schnittstellenmember zu implementieren, muss der entsprechende Member der implementierenden Klasse die öffentliche sein, nicht statisch und verfügt über denselben Namen und derselben Signatur wie der Schnittstellenmember.

Wenn eine Klasse oder Struktur eine Schnittstelle implementiert, müssen die Klasse oder Struktur eine Implementierung für alle Member bereitzustellen, die die Schnittstelle definiert. Die - Schnittstelle selbst stellt keine Funktionalität, die eine Klasse oder Struktur auf die Art erben können, der sie Basisklassenfunktionalität erben kann. Wenn eine Basisklasse eine Schnittstelle implementiert, erbt alle Klassen, die von der Basisklasse abgeleitet ist, diese Implementierung.

Im folgenden Beispiel wird eine Implementierung der - Schnittstelle IEquatable<T> an. 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 mit get und set Accessor deklarieren. Wenn die Eigenschaft oder der Indexer jedoch explizite Implementierung verwendet, müssen die Accessoren übereinstimmen. Weitere Informationen zu expliziten Implementierung, finden Sie unter Explizite Schnittstellenimplementierung (C#-Programmierhandbuch) und Schnittstelleneigenschaften (C#-Programmierhandbuch).

Schnittstellen können andere Schnittstellen implementieren. Eine Klasse umfasste kann eine Schnittstelle mehrmals von Basisklassen, die sie erbt oder über Schnittstellen, die andere Schnittstellen implementieren. Allerdings kann die Klasse eine Implementierung einer Schnittstelle nur einmal bereitstellen und nur dann die Klasse die - Schnittstelle als Teil der Definition der - Klasse (class ClassName : InterfaceName) deklariert. Wenn die Schnittstelle geerbt wird, da eine Basisklasse geerbter, die die - Schnittstelle implementiert, stellt die - Basisklasse die Implementierung der Member. kann jedoch die abgeleitete Klasse die Schnittstellenmember erneut implementieren, anstatt die geerbte Implementierung zu verwenden.

Eine Basisklasse kann auch Schnittstellenmember implementieren, indem sie virtuellen 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.

Schnittstellen als Zusammenfassung

Eine Schnittstelle verfügt über folgende Eigenschaften:

  • Eine Schnittstelle ist wie eine abstrakte Basisklasse. Alle, 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 eine Basisklasse erben und eine oder mehrere auch Schnittstellen implementieren.

In diesem Abschnitt

Verwandte Abschnitte

Enthaltenes Buchkapitel

Schnittstellen in Ihre C# 3.0: Beherrschen Sie die Grundlagen von C# 3.0

Siehe auch

Referenz

Vererbung (C#-Programmierhandbuch)

Konzepte

C#-Programmierhandbuch