Freigeben über


Schnittstellen (Visual Basic)

Schnittstellen definieren die Eigenschaften, Methoden und Ereignisse, die Klassen implementieren können. Schnittstellen ermöglichen es Ihnen, Features als kleine Gruppen eng verwandter Eigenschaften, Methoden und Ereignisse zu definieren; Dadurch werden Kompatibilitätsprobleme reduziert, da Sie erweiterte Implementierungen für Ihre Schnittstellen entwickeln können, ohne vorhandenen Code zu gefährden. Sie können jederzeit neue Features hinzufügen, indem Sie zusätzliche Schnittstellen und Implementierungen entwickeln.

Es gibt mehrere andere Gründe, warum Sie Schnittstellen anstelle der Klassenvererbung verwenden möchten:

  • Schnittstellen eignen sich besser für Situationen, in denen Ihre Anwendungen viele möglicherweise nicht verwandte Objekttypen benötigen, um bestimmte Funktionen bereitzustellen.

  • Schnittstellen sind flexibler als Basisklassen, da Sie eine einzelne Implementierung definieren können, die mehrere Schnittstellen implementieren kann.

  • Schnittstellen sind in Situationen besser, in denen Sie die Implementierung nicht von einer Basisklasse erben müssen.

  • Schnittstellen sind nützlich, wenn Sie die Klassenvererbung nicht verwenden können. Beispielsweise können Strukturen nicht von Klassen erben, aber sie können Schnittstellen implementieren.

Deklarieren von Schnittstellen

Schnittstellendefinitionen sind in die Interface und End Interface Anweisungen eingeschlossen. Nach der Interface Anweisung können Sie eine optionale Inherits Anweisung hinzufügen, die mindestens eine geerbte Schnittstelle auflistet. Die Inherits-Anweisungen müssen, mit Ausnahme von Kommentaren, allen anderen Anweisungen in der Deklaration vorangehen. Die verbleibenden Anweisungen in der Schnittstellendefinition sollten Event, Sub, Function, Property, Interface, Class, Structure, und Enum-Anweisungen sein. Schnittstellen dürfen keinen Implementierungscode oder Anweisungen enthalten, die mit Implementierungscode verknüpft sind, wie End Sub oder End Property.

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

Hinweis

Das Shadows Schlüsselwort kann auf alle Schnittstellenmitglieder angewendet werden. Das Overloads Schlüsselwort kann auf Sub, Function und Property Anweisungen angewendet werden, die in einer Schnittstellendefinition deklariert sind. Darüber hinaus können Property Anweisungen die Default, ReadOnly, oder WriteOnly Modifizierer haben. Keine der anderen Modifizierer – Public, Private, Friend, Protected, Shared, Overrides, MustOverride oder Overridable – ist zulässig. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.

Der folgende Code definiert beispielsweise eine Schnittstelle mit einer Funktion, einer Eigenschaft und einem Ereignis.

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 Struktur eine Schnittstelle implementiert. Das Implements Schlüsselwort gibt an, dass ein Klassenmememm oder -strukturmemm ein bestimmtes Schnittstellenelement implementiert.

Implements-Anweisung

Wenn eine Klasse oder Struktur eine oder mehrere Schnittstellen implementiert, muss sie die Implements Anweisung unmittelbar nach der Class Anweisung oder Structure Anweisung einschließen. Für die Implements Anweisung muss eine durch Trennzeichen getrennte Liste von Schnittstellen von einer Klasse implementiert werden. Die Klasse oder Struktur muss alle Schnittstellenmmber mithilfe des Schlüsselworts Implements implementieren.

Implementiert Schlüsselwort

Für das Implements Schlüsselwort muss eine durch Trennzeichen getrennte Liste der Schnittstellenmember implementiert werden. Im Allgemeinen wird nur ein einzelnes Schnittstellenmember angegeben, Sie können jedoch mehrere Member angeben. Die Spezifikation eines Schnittstellenelements besteht aus dem Schnittstellennamen, der in einer implements-Anweisung innerhalb der Klasse angegeben werden muss; eine Periode; und den Namen der Memberfunktion, -eigenschaft oder -ereignis, die implementiert werden soll. Der Name eines Mitglieds, das ein Schnittstellenmitglied implementiert, kann einen 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 veranschaulicht beispielsweise, wie eine Unterroutine mit dem Namen Sub1 deklariert wird, die eine Methode einer Schnittstelle implementiert:

Class Class1
    Implements interfaceclass.interface2

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

Die Parametertypen und Rückgabetypen des implementierenden Members müssen mit den Schnittstelleneigenschaften oder der Memberdeklaration in der Schnittstelle übereinstimmen. Die gängigste Methode zum Implementieren eines Elements einer Schnittstelle ist es, ein Mitglied mit demselben Namen wie die Schnittstelle zu verwenden, wie im vorherigen Beispiel gezeigt.

Um die Implementierung einer Schnittstellenmethode zu deklarieren, können Sie alle Attribute verwenden, die für Instanzenmethodendeklarationen zulässig sind, einschließlich Overloads, Overrides, Overridable, Public, Private, Protected, Friend, Protected Friend, MustOverride, Default und Static. Das Shared Attribut ist nicht zulässig, da es eine Klasse anstelle einer Instanzmethode definiert.

Sie können mithilfe von Implements auch eine einzelne Methode schreiben, die mehrere Methoden implementiert, die in einer Schnittstelle definiert sind, wie im folgenden Beispiel:

Class Class2
    Implements I1, I2

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

Sie können ein privates Mitglied verwenden, um ein Schnittstellenmitglied zu implementieren. Wenn ein privates Mitglied ein Element einer Schnittstelle implementiert, wird dieses Element über die Schnittstelle verfügbar, obwohl es nicht direkt für Objektvariablen für die Klasse verfügbar ist.

Beispiele für die 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, Interface2erbt Interface1 und definiert eine zusätzliche Eigenschaft und 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

Im nächsten Beispiel wird die im vorherigen Beispiel definierte Schnittstelle implementiert Interface1:

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

Das letzte Beispiel implementiert Interface2, einschließlich einer Methode, die von Interface1 geerbt wurde.

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

Sie können eine schreibgeschützte Eigenschaft mit einer Readwrite-Eigenschaft implementieren (das heißt, Sie müssen sie nicht als schreibgeschützt in der implementierenden Klasse deklarieren). Implementieren einer Schnittstelle verspricht mindestens die Member zu implementieren, die die Schnittstelle deklariert, aber Sie können mehr Funktionalität bieten, z. B. Schreibbarkeit Ihrer Eigenschaft.

Titel BESCHREIBUNG
Anleitung: Erstellen und Implementieren von Schnittstellen Enthält ein detailliertes Verfahren, das Sie durch den Prozess der Definition und Implementierung Ihrer eigenen Schnittstelle führt.
Varianz in generischen Schnittstellen Erläutert Kovarianz und Kontravarianz in generischen Schnittstellen und stellt eine Liste der generischen Variantenschnittstellen in .NET Framework bereit.