War diese Seite hilfreich?
Ihr Feedback ist uns wichtig. Teilen Sie uns Ihre Meinung mit.
Weiteres Feedback?
1500 verbleibende Zeichen
Schnittstellen (C#-Programmierhandbuch)
Dieser Artikel wurde manuell ü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 einer - Klasse oder einer Struktur implementiert werden können.

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. Zudem müssen Sie eine Schnittstelle verwenden, wenn Sie die Vererbung für Strukturen simulieren möchten, da sie tatsächlich nicht von einer anderen Struktur oder Klasse 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 über abstrakte 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 sie 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 Implementierungsklasse Car muss die Implementierung der Equals-Methode 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 in einer Schnittstelle definierten Indexer definieren. Beispielsweise kann eine Schnittstelle eine Eigenschaft deklarieren, die über 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 die 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 durch das Überschreiben der virtuellen Member ändern. Weitere Informationen über virtuelle Member finden Sie unter Polymorphismus.

Eine Schnittstelle verfügt über die folgenden Eigenschaften:

  • Eine Schnittstelle ähnelt einer abstrakten 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.

Anzeigen:
© 2015 Microsoft