Share via


Schnittstellen (C#-Programmierhandbuch)

Schnittstellen beschreiben eine Gruppe verwandter Funktionen, die zu einer beliebigen Klasse oder Struktur gehören können. Wie im folgenden Beispiel definieren Sie eine Schnittstelle mit dem Schlüsselwort interface:

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

Schnittstellen bestehen aus Methoden, Eigenschaften, Ereignissen, Indexern oder einer beliebigen Kombination dieser vier Membertypen. Eine Schnittstelle kann keine Konstanten, Felder, Operatoren, Instanzkonstruktoren, Destruktoren oder Typen enthalten. Sie kann keine statischen Member enthalten. Schnittstellenmember sind automatisch öffentlich und können keine Zugriffsmodifizierer enthalten.

Wenn eine Klasse oder Struktur eine Schnittstelle implementiert, bedeutet dies, dass die Klasse bzw. die Struktur eine Implementierung für sämtliche Member bereitstellt, die von der Schnittstelle definiert werden. Die Schnittstelle selbst stellt keine Funktionen bereit, die von einer Klasse oder Struktur wie Basisklassenfunktionen geerbt werden können. Wenn eine Basisklasse jedoch eine Schnittstelle implementiert, erbt die abgeleitete Klasse die entsprechende Implementierung. Die abgeleitete Klasse soll die Schnittstelle implizit implementieren.

Klassen und Strukturen implementieren Schnittstellen auf dieselbe Art und Weise wie Klassen eine Basisklasse oder -struktur erben. Es bestehen lediglich zwei Unterschiede:

  • Eine Klasse oder eine Struktur kann mehr als eine Schnittstelle implementieren.

  • Wenn eine Klasse oder Struktur eine Schnittstelle implementiert, empfängt sie nur die Methodennamen und -signaturen, da die Schnittstelle selbst keine Implementierungen enthält, wie im folgenden Beispiel gezeigt.

    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;
        }
    }
    

Die IEquatable<T>-Schnittstelle teilt dem Benutzer des Objekts mit, dass dieses auf Gleichheit mit anderen Objekten desselben Typs untersucht werden kann, wobei dem Benutzer der Schnittstelle keine entsprechenden Implementierungsdetails bekannt sein müssen.

Um einen Schnittstellenmember zu implementieren, muss der entsprechende Member der Klasse öffentlich und nicht statisch sein, und er muss über denselben Namen und dieselbe Signatur wie der Schnittstellenmember verfügen. Eigenschaften und Indexer für eine Klasse können zusätzliche Accessoren für eine Eigenschaft oder einen Indexer definieren, die bzw. der für eine Schnittstelle definiert ist. Zum Beispiel könnte eine Schnittstelle eine Eigenschaft deklarieren, die über einen get-Accessor verfügt. Die Klasse, die die Schnittstelle implementiert, kann die gleiche Eigenschaft mit einem 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 Schnittstelleneigenschaften (C#-Programmierhandbuch).

Schnittstellen und Schnittstellenmember sind abstrakt. Schnittstellen stellen keine Standardimplementierung bereit. Weitere Informationen finden Sie unter Abstrakte und versiegelte Klassen und Klassenmember.

Schnittstellen können von anderen Schnittstellen erben. Eine Klasse kann eine Schnittstelle durch geerbte Basisklassen oder durch von anderen Schnittstellen geerbten Schnittstellen mehrfach erben. Allerdings kann die Klasse eine Schnittstelle nur einmal und nur dann implementieren, wenn die Schnittstelle als Teil der Definition der Klasse deklariert wird, wie in class ClassName : InterfaceName. Wenn die Schnittstelle geerbt wird, da eine Basisklasse, die die Schnittstelle implementiert, geerbt wurde, wird die Implementierung von der Basisklasse bereitgestellt. Es ist auch möglich, dass eine Basisklasse Schnittstellenmember mithilfe von virtuellen Member implementiert. 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.

Übersicht über Schnittstellen

Eine Schnittstelle verfügt über folgende Eigenschaften:

  • Eine Schnittstelle ähnelt einer abstrakten Basisklasse: Jeder nicht abstrakte Typ, der die Schnittstelle implementiert, muss alle ihre Member implementieren.

  • Eine Schnittstelle kann nicht direkt instanziiert werden.

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

  • Schnittstellen enthalten keine Implementierung von Methoden.

  • Klassen und Strukturen können mehr als eine Schnittstelle implementieren.

  • Eine Schnittstelle selbst kann von mehreren Schnittstellen erben.

In diesem Abschnitt

Verwandte Abschnitte

Enthaltene Buchkapitel

Interfaces in Learning C# 3.0: Master the Fundamentals of C# 3.0

Siehe auch

Referenz

Vererbung (C#-Programmierhandbuch)

Konzepte

C#-Programmierhandbuch

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Juli 2010

Es wird zwischen Implementierung und Vererbung unterschieden. Erläutert, was und was nicht in Schnittstellen enthalten sein kann.

Kundenfeedback.