Schnittstellen (C#-Programmierhandbuch)

 

Veröffentlicht: Juli 2016

Die neueste Dokumentation zu Visual Studio 2017 RC finden Sie unter Visual Studio 2017 RC Documentation (Dokumentation zu Visual Studio 2017 RC).

Eine Schnittstelle enthält Definitionen für eine Gruppe von zugehörigen Funktionalitäten, die von einer Klasse oder einer Struktur implementiert werden können.

Durch die Verwendung von Schnittstellen können Sie beispielsweise das Verhalten aus mehreren Quellen in einer Klasse einbeziehen. Diese Funktion ist wichtig in C#, da die Sprache die mehrfache Vererbung 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 durch die Verwendung des Schlüsselworts interface, wie dies im folgenden Beispiel gezeigt wird.

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

Jede die IEquatable<T>-Schnittstelle implementierende Klasse oder Struktur muss eine Definition für eine Equals-Methode enthalten, die mit der Signatur übereinstimmt, die durch die Schnittstelle angegeben wird. Daher können Sie auf eine Klasse zählen, die IEquatable<T> für die Einbeziehung einer Equals-Methode implementiert, mit der eine Instanz der Klasse bestimmen kann, ob es sich zu einer anderen Instanz derselben Klasse identisch verhält.

Die Definition für IEquatable<T> stellt keine Implementierung für Equals bereit. Die Schnittstelle definiert nur die Signatur. Auf diese Weise ähnelt eine Schnittstelle in C# einer abstrakten Klasse, in der alle Methoden abstrakt sind. Eine Klasse oder Struktur kann jedoch mehrere Schnittstellen implementieren. Eine Klasse kann jedoch nur eine einzelne Klasse, ein Abstrakt oder nichts erben. Daher können Sie durch die Verwendung von Schnittstellen das Verhalten von mehreren Quellen in einer Klasse einbeziehen.

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 aus diesen vier Membertypen enthalten. Links zu den Beispielen finden Sie unter Verwandte Abschnitte. Eine Schnittstelle kann weder Konstanten, Felder, Operatoren, Instanzkonstruktoren, Destruktoren noch Typen enthalten. Schnittstellenmember sind automatisch öffentlich, und sie können keine Zugriffsmodifizierer enthalten. Member können zudem nicht statisch sein.

Zum Implementieren eines Schnittstellenmembers muss das entsprechende Member der Implementierungsklasse öffentlich und nicht statisch sein und muss über denselben Namen und die Signatur wie das Schnittstellenmember verfügen.

Wenn eine Klasse oder Struktur eine Schnittstelle implementiert, muss die Klasse oder Struktur eine Implementierung für alle Member bereitstellen, die durch die Schnittstelle definiert wird. Die Schnittstelle an sich stellt keine Funktionalität bereit, die eine Klasse oder Struktur dergestalt erben kann, sodass es die Funktionalität der Basisklasse erben kann Wenn eine Basisklasse jedoch eine Schnittstelle implementiert, erbt jede aus der Basisklasse abgeleitete Klasse diese Implementierung.

Im folgenden Beispiel wird eine Implementierung der IEquatable<T>-Schnittstelle 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 einen get-Accessor aufweist. Die die Schnittstelle implementierende Klasse kann dieselbe Eigenschaft mit einem get- und set-Accessor deklarieren. Wenn die Eigenschaft oder der Indexer jedoch die explizite Implementierung verwendet, müssen die Accessoren übereinstimmen. Weitere Informationen über die explizite Implementierung finden Sie unter Explizite Schnittstellenimplementierung und Schnittstelleneigenschaften.

Schnittstellen können andere Schnittstellen implementieren. Eine Klasse kann eine Schnittstelle mehrfach über geerbte Basisklassen einbeziehen, die sie erbt, oder über Schnittstellen, die von anderen Schnittstellen implementiert werden. Die Klasse kann jedoch nur einmal eine Implementierung einer Schnittstelle bereitstellen und auch nur dann, wenn die Klasse die Schnittstelle als Bestandteil der Definition der Klasse (class ClassName : InterfaceName) deklariert. Wenn die Schnittstelle geerbt wurde, da Sie eine Basisklasse geerbt haben, die die Schnittstelle implementiert, bietet die Basisklasse die Implementierung der Member der Schnittstelle. Die abgeleitete Klasse kann jedoch anstelle der Verwendung der geerbten Implementierung die Schnittstellenmember erneut implementieren.

Eine Basisklasse kann zudem Schnittstellenmember mithilfe von virtuellen Membern implementieren. 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 die Schnittstelle implementierende Klasse oder Struktur muss alle zugehörigen Member implementieren.

  • Eine Schnittstelle kann nicht direkt instanziiert werden. Die zugehörigen Member werden durch die die Schnittstelle implementierende Klasse oder Struktur 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 keine Basisklasse erben und zudem eine oder mehrere Schnittstellen implementieren.

Explizite Schnittstellenimplementierung
Erläutert das Erstellen eines für eine Schnittstelle spezifischen Klassenmembers.

Gewusst wie: Explizites Implementieren von Schnittstellenmembern
Enthält ein Beispiel über das explizite Implementieren von Schnittstellenmembern.

Gewusst wie: Explizites Implementieren von Membern zweier Schnittstellen
Enthält ein Beispiel über das explizite Implementieren von Schnittstellenmembern mit Vererbung.

Schnittstellen in Erlernen von C# 3.0: Grundlagen von C# 3.0

C#-Programmierhandbuch
Vererbung

Anzeigen: