Schnittstellen (Visual Basic)

Schnittstellen definieren die Eigenschaften, Methoden und Ereignisse, die von Klassen implementiert werden können. Mit Schnittstellen können Sie Features als kleine Gruppen miteinander eng verwandter Eigenschaften, Methoden und Ereignisse definieren. Dadurch werden Kompatibilitätsprobleme reduziert, da Sie für die Schnittstellen verbesserte Implementierungen entwickeln können, ohne dabei vorhandenen Code zu gefährden. Sie können jederzeit neue Features hinzufügen, indem Sie weitere Schnittstellen und Implementierungen entwickeln.

Die Verwendung von Schnittstellen anstelle der Klassenvererbung empfiehlt sich auch aus anderen Gründen:

  • Schnittstellen sind für Situationen besser geeignet, in denen Anwendungen für die Bereitstellung bestimmter Funktionen eine Vielzahl von möglicherweise nicht zusammenhängenden Objekttypen erfordern.

  • Schnittstellen sind flexibler als Basisklassen, da Sie eine einzelne Implementierung für mehrere Schnittstellen definieren können.

  • Schnittstellen sind vorzuziehen, wenn die Vererbung einer Implementierung von einer Basisklasse nicht erforderlich ist.

  • Schnittstellen sind in Fällen zu empfehlen, in denen keine Klassenvererbung verwendet werden kann. Strukturen können beispielsweise nicht von Klassen erben, können jedoch Schnittstellen implementieren.

Deklarieren von Schnittstellen

Schnittstellendefinitionen werden von den Anweisungen Interface und End Interface eingeschlossen. Nach der Interface-Anweisung können Sie eine optionale Inherits-Anweisung einfügen, die eine oder mehrere geerbte Schnittstellen auflistet. Die Inherits-Anweisung muss in der Deklaration vor allen anderen Anweisungen stehen. Eine Ausnahme bilden hierbei Kommentare. Die übrigen Anweisungen der Schnittstellendefinition sollten Event-, Sub-, Function-, Property-, Interface-, Class-, Structure- und Enum-Anweisungen sein. Schnittstellen dürfen weder Implementierungscode noch zu solchem Code gehörende Anweisungen (z. B. End Sub oder End Property) enthalten.

In einem Namespace sind Schnittstellenanweisungen standardmäßig als Friend definiert, sie können aber auch explizit als Public oder Friend deklariert werden. Innerhalb von Klassen, Modulen, Schnittstellen und Strukturen definierte Schnittstellen sind standardmäßig als Public definiert, sie können aber auch explizit als Public, Friend, Protected oder Private deklariert werden.

Tipp

Das Shadows-Schlüsselwort kann auf alle Schnittstellenmember angewendet werden. Das Overloads-Schlüsselwort kann auf die in einer Schnittstellendefinition deklarierten Anweisungen Sub, Function und Property angewendet werden. Zudem können Property-Anweisungen die Modifizierer Default, ReadOnly und WriteOnly aufweisen. Alle anderen Modifizierer (Public, Private, Friend, Protected, Shared, Overrides, MustOverride und Overridable) sind unzulässig. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen (Visual Basic).

Mit dem folgenden Code werden beispielsweise eine Schnittstelle mit einer Funktion, eine Eigenschaft und ein Ereignis definiert.

Interface IAsset
    Event ComittedChange(ByVal Success As Boolean)
    Property Division() As String
    Function GetID() As Integer
End Interface

Implementieren von Schnittstellen

Das reservierte Visual Basic-Wort Implements wird auf zwei Arten verwendet. Die Implements-Anweisung gibt an, dass eine Klasse oder eine Struktur eine Schnittstelle implementiert. Das Implements-Schlüsselwort gibt an, dass ein Klassenmember oder ein Strukturmember einen bestimmten Schnittstellenmember implementiert.

Implements-Anweisung

Wenn eine Klasse oder eine Struktur mindestens eine Schnittstelle implementiert, muss die Implements-Anweisung der Class-Anweisung oder der Structure-Anweisung direkt folgen. Die Implements-Anweisung erfordert eine durch Trennzeichen getrennte Liste mit Schnittstellen, die von einer Klasse implementiert werden muss. Die Klasse oder die Struktur muss alle Schnittstellenmember mit dem Implements-Schlüsselwort implementieren.

Implements-Schlüsselwort

Das Implements-Schlüsselwort erfordert die Implementierung einer durch Trennzeichen getrennten Liste mit Schnittstellenmembern. Im Allgemeinen wird nur ein einziger Schnittstellenmember angegeben. Sie können aber mehrere Member festlegen. Die Spezifizierung eines Schnittstellenmembers besteht aus dem Schnittstellennamen, der in einer Implementierungsanweisung in einer Klasse angegeben werden muss, einem Punkt und dem Namen der zu implementierenden Memberfunktion, der zu implementierenden Membereigenschaft bzw. des zu implementierenden Memberereignisses. Der Name eines Members, der einen Schnittstellenmember implementiert, kann jeden beliebigen zulässigen Bezeichner verwenden und ist nicht auf die in früheren Versionen von Visual Basic verwendete InterfaceName_MethodName-Konvention beschränkt.

Der folgende Code zeigt z. B. die Deklaration einer Unterroutine mit der Bezeichnung Sub1, die eine Schnittstellenmethode implementiert:

Class Class1
    Implements interfaceclass.interface2

    Sub Sub1(ByVal i As Integer) Implements interfaceclass.interface2.Sub1
    End Sub
End Class

Die Parameter- und Rückgabetypen des implementierenden Members müssen der Schnittstelleneigenschaft oder der Memberdeklaration in der Schnittstelle entsprechen. Die häufigste Methode zum Implementieren eines Schnittstellenelements verwendet einen Member mit dem Namen der Schnittstelle (siehe oben stehendes Beispiel).

Zum Deklarieren der Implementierung einer Schnittstellenmethode können Sie alle für Deklarationen von Instanzenmethoden zulässigen Attribute verwenden, u. a. Overloads, Overrides, Overridable, Public, Private, Protected, Friend, Protected Friend, MustOverride, Default und Static. Das Shared-Attribut ist nicht zulässig, da damit keine Instanzenmethode, sondern eine Klasse definiert wird.

Mit Implements können Sie auch eine einfache Methode einfügen, mit der, wie im folgenden Beispiel, mehrere in einer Schnittstelle definierte Methoden implementiert werden:

Class Class2
    Implements I1, I2

    Protected Sub M1() Implements I1.M1, I1.M2, I2.M3, I2.M4
    End Sub
End Class

Zum Implementieren von Schnittstellenmembern können Sie einen privaten Member verwenden. Wenn ein privater Member einen Member einer Schnittstelle implementiert, wird dieser Member durch die Schnittstelle verfügbar, obwohl er nicht direkt in Objektvariablen für die Klasse verfügbar ist.

Beispiele für Schnittstellenimplementierung

Klassen, die eine Schnittstelle implementieren, müssen alle zugehörigen Eigenschaften, Methoden und Ereignisse implementieren.

Im folgenden Beispiel werden zwei Schnittstellen definiert. Die zweite Schnittstelle (Interface2) erbt Interface1 und definiert eine zusätzliche Eigenschaft und eine zusätzliche Methode.

Interface Interface1
    Sub sub1(ByVal i As Integer)
End Interface

' Demonstrates interface inheritance.
Interface Interface2
    Inherits Interface1
    Sub M1(ByVal y As Integer)
    ReadOnly Property Num() As Integer
End Interface

Das nächste Beispiel implementiert Interface1 (die Schnittstelle, die im vorherigen Beispiel definiert wurde):

Public Class ImplementationClass1
    Implements Interface1
    Sub Sub1(ByVal i As Integer) Implements Interface1.sub1
        ' Insert code here to implement this method.
    End Sub
End Class

Im abschließenden Beispiel wird Interface2 mit einer von Interface1 geerbten Methode implementiert:

Public Class ImplementationClass2
    Implements Interface2
    Dim INum As Integer = 0
    Sub sub1(ByVal i As Integer) Implements Interface2.sub1
        ' Insert code here that implements this method.
    End Sub
    Sub M1(ByVal x As Integer) Implements Interface2.M1
        ' Insert code here to implement this method.
    End Sub

    ReadOnly Property Num() As Integer Implements Interface2.Num
        Get
            Num = INum
        End Get
    End Property
End Class

Verwandte Themen

Titel

Beschreibung

Exemplarische Vorgehensweise: Erstellen und Implementieren von Schnittstellen (Visual Basic)

Enthält eine detaillierte Prozedur, die Sie durch den Vorgang zum Erstellen und Implementieren eigener Schnittstellen führt.

Varianz in generischen Schnittstellen (C# und Visual Basic)

Erläutert Kovarianz und Kontravarianz in generischen Schnittstellen und stellt eine Liste varianter generischer Schnittstellen in .NET Framework bereit.