Schnittstellen (Visual Basic)
Schnittstellen definieren die Eigenschaften, Methoden und Ereignisse, die von Klassen implementiert werden können. Schnittstellen erlauben es Ihnen, Funktionen als kleine Gruppen mit verwandten Eigenschaften, Methoden und Ereignisse zu definieren. Dadurch werden Kompatibilitätsprobleme reduziert, da Sie für die Schnittstellen erweiterte Implementierungen entwickeln können, ohne vorhandenen Code zu gefährden. Sie können neue Funktionen zu einem beliebigen Zeitpunkt hinzufügen, indem Sie weitere Schnittstellen und Implementierungen entwickeln.
Es gibt viele weitere Gründe, warum Sie möglicherweise Schnittstellen anstelle der Klassenvererbung verwenden möchten:
Schnittstellen sind besser für Situationen geeignet, in denen Anwendungen viele nicht verknüpfte Objekttypen erfordern, 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 vorzuziehen, in denen Sie keine Implementierung von einer Basisklasse erben.
Schnittstellen sind nützlich, wenn Sie keine Klassenvererbung verwenden können. Z. B. Strukturen können nicht von Klassen erben, sie können jedoch Schnittstellen implementieren.
Deklarieren von Schnittstellen
Schnittstellendefinitionen werden innerhalb der Interface
und End Interface
Anweisungen eingeschlossen. Nach der Interface
Anweisung können Sie eine optionale Inherits
Anweisung hinzufügen, die eine oder mehrere geerbte Schnittstellen auflistet. Die Inherits
Anweisungen müssen in der Deklaration vor allen anderen Anweisungen, außer Kommentaren, stehen. Die übrigen Anweisungen der Schnittstellendefinition sollten Event
, Sub
, Function
, Property
, Interface
, Class
, Structure
, und Enum
Anweisungen sein. Schnittstellen können keinen Implementierungscode oder Anweisungen, die Implementierungscode zugeordnet sind, enthalten, wie z. B. End Sub
oder End Property
.
In einem Namespace sind Schnittstellenanweisungen standardmäßig Friend
, aber sie können auch explizit als Public
oder Friend
deklariert sein. Schnittstellen, die innerhalb von Klassen, Modulen, Schnittstellen und Strukturen definiert sind, sind standardmäßig Public
, können aber auch explizit als Public
, Friend
, Protected
, oder Private
deklariert sein.
Hinweis
Das Shadows
Schlüsselwort kann auf alle Schnittstellenmember angewendet werden. Das Overloads
Schlüsselwort kann bei Sub
, Function
, und Property
Anweisungen angewendet werden und wird in der Schnittstellendefinition deklariert. Darüber hinaus können Property
Anweisungen die Default
, ReadOnly
, oder WriteOnly
Modifizierer haben. Alle anderen Modifizierer –Public
, Private
, Friend
, Protected
, Shared
, Overrides
, MustOverride
, oder Overridable
– sind zulässig. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.
Im folgende Code wird 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 Visual Basic reservierte Wort Implements
wird in zwei Arten verwendet. Die Implements
Anweisung gibt an, dass eine Klasse oder Struktur eine Schnittstelle implementiert. Das Implements
Schlüsselwort gibt an, dass ein Klassenmember oder ein Strukturmember ein bestimmtes Schnittstellenmember implementiert.
Implements-Anweisung
Wenn eine Klasse oder Struktur eine oder mehrere Schnittstellen implementiert, muss die Implements
Anweisung unmittelbar nach der Class
oder Structure
Anweisung erfolgen. Die Implements
Anweisung erfordert eine durch Trennzeichen getrennte Liste mit Schnittstellen, die von einer Klasse implementiert werden. Die Klasse oder Struktur muss alle Schnittstellenmember mit dem Implements
Schlüsselwort implementieren.
Implements-Schlüsselwort
Das Implements
Schlüsselwort erfordert eine durch Trennzeichen getrennte Liste mit Schnittstellenmembern, die implementiert werden. In der Regel wird nur ein einziger Schnittstellenmember angegeben, aber Sie können mehrere Members angeben. Die Spezifikation eines Schnittstellenmembers besteht aus dem Schnittstellennamen, der in einer Implementierungsanweisung innerhalb der Klasse angegeben werden muss, einem Zeitraum und dem Namen der Memberfunktion, der Eigenschaft oder des Ereignisses, das implementiert werden soll. Der Name des Members, der ein Schnittstellenmember implementiert, kann jeden beliebigen zulässigen Bezeichner verwenden; und es gibt keine Beschränkung auf die InterfaceName_MethodName
-Konvention, die in früheren Versionen von Visual Basic verwendet wurde.
Der folgende Code zeigt z. B. das Deklarieren einer Unterroutine namens Sub1
, 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, um ein Element in einer Schnittstelle zu implementieren, ist mit einem Element, das den gleichen Namen wie die Schnittstelle hat, wie im vorherigen Beispiel gezeigt.
Zum Deklarieren der Implementierung einer Schnittstellenmethode können Sie alle Attribute verwenden, die für Deklarationen von Instanzenmethoden, einschließlich Overloads
, Overrides
, Overridable
, Public
, Private
, Protected
, Friend
, Protected Friend
, MustOverride
, Default
, und Static
zulässig sind. Das Shared
Attribut ist nicht zulässig, da es keine Instanzmethode, sondern eine Klasse definiert.
Mithilfe von Implements
, können Sie auch eine einzelne Methode schreiben, die mehrere Methoden implementiert, die in einer Schnittstelle definiert sind, wie z. B.:
Class Class2
Implements I1, I2
Protected Sub M1() Implements I1.M1, I1.M2, I2.M3, I2.M4
End Sub
End Class
Sie können einen privaten Member verwenden, um ein Schnittstellenmember zu implementieren. Wenn ein privater Member einen Member einer Schnittstelle implementiert, wird dieses 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 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 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 im vorherigen Beispiel definierte Schnittstelle:
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 abschließende Beispiel implementiert Interface2
, einschließlich einer Methode geerbt von Interface1
:
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.
Verwandte Themen
Titel | Beschreibung |
---|---|
Exemplarische Vorgehensweise: Erstellen und Implementieren von Schnittstellen | Bietet eine ausführliche Anleitung, die Sie durch den Prozess des Definierens und Implementierens Ihrer eigenen Schnittstellen führt. |
Abweichungen bei generischen Schnittstellen | Erläutert Ko- und Kontravarianz in generischen Schnittstellen und enthält eine Liste der Varianten generischen Schnittstellen in .NET Framework. |