Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 Friend
deklariert 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, 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
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.
Verwandte Themen
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. |