Interface-Anweisung (Visual Basic)

Hiermit wird der Name einer Schnittstelle deklariert, und die Definitionen der Member werden eingeführt, die die Schnittstelle umfasst.

Syntax

[ <attributelist> ] [ accessmodifier ] [ Shadows ] _  
Interface name [ ( Of typelist ) ]  
    [ Inherits interfacenames ]  
    [ [ modifiers ] Property membername ]  
    [ [ modifiers ] Function membername ]  
    [ [ modifiers ] Sub membername ]  
    [ [ modifiers ] Event membername ]  
    [ [ modifiers ] Interface membername ]  
    [ [ modifiers ] Class membername ]  
    [ [ modifiers ] Structure membername ]  
End Interface  

Bestandteile

Begriff Definition
attributelist Dies ist optional. Siehe Attributliste.
accessmodifier Optional. Dabei kann es sich um eine der folgenden Methoden handeln:

- Public
- Protected
- Friend
- Privat
- Protected Friend
- Private Protected

Siehe Access levels in Visual Basic.
Shadows Optional. Siehe Shadows.
name Erforderlich. Dies ist der Name dieser Schnittstelle. Siehe Declared Element Names.
Of Optional. Dieser Begriff gibt an, dass es sich um eine generische Schnittstelle handelt.
typelist Dieser Begriff ist erforderlich, wenn Sie das Of-Schlüsselwort verwenden. Dies ist eine Liste der generischen Typparameter für diese Schnittstelle. Optional kann jeder generischer Typparameter mit den generischen Modifizierern In und Out als Variante deklariert werden. Weitere Informationen finden Sie unter Typliste.
Inherits Optional. Hiermit wird angegeben, dass diese Schnittstelle die Attribute und Member einer anderen Schnittstelle oder von Schnittstellen erbt. Weitere Informationen finden Sie unter Inherits-Anweisung.
interfacenames Erforderlich, wenn Sie die Inherits-Anweisung verwenden. Die Namen der Schnittstellen, von denen diese Schnittstelle abgeleitet wird.
modifiers Optional. Dies sind geeignete Modifizierer für den zu definierenden Schnittstellenmember.
Property Optional. Hiermit wird eine Eigenschaft definiert, die ein Member der Schnittstelle ist.
Function Optional. Hiermit wird eine Function-Prozedur definiert, die Member der Schnittstelle ist.
Sub Optional. Hiermit wird eine Sub-Prozedur definiert, die Member der Schnittstelle ist.
Event Optional. Hiermit wird ein Ereignis definiert, das Member der Schnittstelle ist.
Interface Optional. Hiermit wird eine Schnittstelle definiert, die in dieser Schnittstelle geschachtelt ist. Die Definition der geschachtelten Schnittstelle muss mit einer End Interface-Anweisung beendet werden.
Class Optional. Hiermit wird eine Klasse definiert, die Member der Schnittstelle ist. Die Memberklassendefinition muss mit einer End Class-Anweisung beendet werden.
Structure Optional. Hiermit wird eine Struktur definiert, die Member der Schnittstelle ist. Die Memberstrukturdefinition muss mit einer End Structure-Anweisung beendet werden.
membername Dieser Begriff ist für jedes Ereignis und jede Eigenschaft, Prozedur, Schnittstelle, Klasse oder Struktur erforderlich, das bzw. die als Member der Schnittstelle definiert ist. Der Name des Members.
End Interface Beendet die Interface-Definition.

Bemerkungen

Eine Schnittstelle definiert eine Reihe von Membern (z. B. Eigenschaften und Prozeduren), die Klassen und Strukturen implementieren können. Die Schnittstelle definiert nur die Signaturen der Member und nicht deren interne Funktionen.

Eine Klasse oder Struktur implementiert die Schnittstelle durch Bereitstellen von Code für jeden von der Schnittstelle definierten Member. Wenn die Anwendung schließlich eine Instanz über diese Klasse oder Struktur erstellt, ist ein Objekt vorhanden und wird im Arbeitsspeicher ausgeführt. Weitere Informationen finden Sie unter Objekte und Klassen und Schnittstellen.

Interface kann nur auf Namespace- oder Modulebene verwendet werden. Dies bedeutet, dass der Deklarationskontext für eine Schnittstelle eine Quelldatei, ein Namespace, eine Klasse, eine Struktur, ein Modul oder eine Schnittstelle sein muss und weder eine Prozedur noch ein Block sein kann. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.

Für Schnittstellen ist standardmäßig der Friend-Zugriff festgelegt. Sie können ihre Zugriffsebenen mit den Zugriffsmodifizierern anpassen. Weitere Informationen finden Sie unter Zugriffsebenen in Visual Basic.

Regeln

  • Schachtelungsschnittstellen: Sie können eine Schnittstelle innerhalb einer anderen definieren. Die äußere Schnittstelle wird als enthaltende Schnittstelle bezeichnet, die innere als geschachtelte Schnittstelle.

  • Memberdeklaration. Wenn Sie eine Eigenschaft oder Prozedur als Member einer Schnittstelle deklarieren, definieren Sie nur die Signatur dieser Eigenschaft oder Prozedur. Dazu gehören der Elementtyp (Eigenschaft oder Prozedur), die Parameter und Parametertypen sowie der Rückgabetyp. Aus diesem Grund verwendet die Memberdefinition nur eine Codezeile, und beendende Anweisungen wie End Function oder End Property sind in einer Schnittstelle nicht gültig.

    Wenn Sie jedoch eine Enumeration oder Struktur oder eine geschachtelte Klasse oder Schnittstelle definieren, ist es erforderlich, ihre Datenmember einzuschließen.

  • Membermodifizierer: Sie können keine Zugriffsmodifizierer verwenden, wenn Sie Modulmember definieren, und mit Ausnahme von Überladungen können Sie auch keine Shared-Elemente oder Prozedurmodifizierer angeben. Sie können jeden Member mit Shadows deklarieren, und Sie können beim Definieren einer Eigenschaft Default sowie ReadOnly oder WriteOnly verwenden.

  • Vererbung. Wenn die Schnittstelle die Inherits-Anweisung verwendet, können Sie eine oder mehrere Basisschnittstellen angeben. Sie können von zwei Schnittstellen auch dann erben, wenn diese jeweils einen Member mit demselben Namen definieren. Wenn Sie so vorgehen, muss der implementierende Code Namensqualifizierung verwenden, um anzugeben, welchen Member er implementiert.

    Eine Schnittstelle kann nicht von einer anderen Schnittstelle mit einer restriktiveren Zugriffsebene erben. Beispielsweise kann eine Public-Schnittstelle nicht von einer Friend-Schnittstelle erben.

    Eine Schnittstelle kann nicht von einer in ihr geschachtelten Schnittstelle erben.

  • Implementierung. Wenn eine Klasse die Implements-Anweisung verwendet, um diese Schnittstelle zu implementieren, muss jeder Member implementiert werden, der innerhalb der Schnittstelle definiert ist. Darüber hinaus muss jede Signatur im Implementierungscode genau mit der in dieser Schnittstelle definierten entsprechenden Signatur übereinstimmen. Der Name des Members im Implementierungscode muss jedoch nicht mit dem in der Schnittstelle definierten Membernamen übereinstimmen.

    Wenn eine Klasse eine Prozedur implementiert, kann sie die Prozedur nicht als Shared festlegen.

  • Standardeigenschaft. Eine Schnittstelle kann höchstens eine Eigenschaft als Standardeigenschaft angeben, auf die ohne den Eigenschaftennamen verwiesen werden kann. Sie geben eine solche Eigenschaft an, indem Sie sie mit dem Default-Modifizierer deklarieren.

    Beachten Sie, dass eine Schnittstelle eine Standardeigenschaft nur definieren kann, wenn sie keine erbt.

Verhalten

  • Zugriffsebene: Alle Schnittstellenmember verfügen implizit über Public-Zugriff. Sie können beim Definieren eines Members keinen Zugriffsmodifizierer verwenden. Eine Klasse, die die Schnittstelle implementiert, kann jedoch eine Zugriffsebene für jeden implementierten Member deklarieren.

    Wenn Sie einer Variablen eine Klasseninstanz zuweisen, kann die Zugriffsebene ihrer Member davon abhängen, ob der Datentyp der Variablen die zugrunde liegende Schnittstelle oder die implementierende Klasse ist. Dies wird anhand des folgenden Beispiels veranschaulicht.

    Public Interface IDemo
        Sub DoSomething()
    End Interface
    Public Class implementIDemo
        Implements IDemo
        Private Sub DoSomething() Implements IDemo.DoSomething
        End Sub
    End Class
    Dim varAsInterface As IDemo = New implementIDemo()
    Dim varAsClass As implementIDemo = New implementIDemo()
    

    Wenn Sie über varAsInterface auf Klassenmember zugreifen, verfügen sie alle über öffentlichen Zugriff. Wenn Sie jedoch über varAsClass auf Member zugreifen, hat die Sub-Prozedur doSomething privaten Zugriff.

  • Umfang. Der Gültigkeitsbereich einer Schnittstelle umfasst den Namespace, die Klasse, die Struktur oder das Modul.

    Der Gültigkeitsbereich jedes Schnittstellenmembers ist die gesamte Schnittstelle.

  • Lifetime (Lebensdauer). Schnittstellen und ihre Member haben selbst keine Lebensdauer. Wenn eine Klasse eine Schnittstelle implementiert und ein Objekt als Instanz dieser Klasse erstellt wird, hat das Objekt eine Lebensdauer innerhalb der Anwendung, in der es ausgeführt wird. Weitere Informationen finden Sie unter „Lebensdauer“ im Artikel zur Class-Anweisung.

Beispiel

Im folgenden Beispiel wird die Interface-Anweisung verwendet, um eine Schnittstelle namens thisInterface zu definieren, die mit einer Property-Anweisung und einer Function-Anweisung implementiert werden muss.

Public Interface thisInterface
    Property ThisProp(ByVal thisStr As String) As Char
    Function ThisFunc(ByVal thisInt As Integer) As Integer
End Interface

Beachten Sie, dass die Anweisungen Property und Function keine Blöcke einführen, die mit End Property und End Function innerhalb der Schnittstelle enden. Die Schnittstelle definiert nur die Signaturen ihrer Member. Die vollständigen Blöcke Property und Function werden in einer Klasse angezeigt, die thisInterface implementiert.

Siehe auch