Delen via


Interface-instructie (Visual Basic)

Declareert de naam van een interface en introduceert de definities van de leden die de interface omvat.

Syntaxis

[ <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  

generator

Term Definitie
attributelist Optioneel. Zie de lijst met kenmerken.
accessmodifier Optioneel. Dit kan een van de volgende zijn:

- Openbaar
- Beschermd
- Vriend
- Privé
- Beveiligde vriend
- Privé beveiligd

Zie Access-niveaus in Visual Basic.
Shadows Optioneel. Zie schaduwen.
name Vereist. Naam van deze interface. Zie Gedeclareerde elementnamen.
Of Optioneel. Hiermee geeft u op dat dit een algemene interface is.
typelist Vereist als u het trefwoord Van gebruikt. Lijst met typeparameters voor deze interface. Optioneel kan elke typeparameter worden gedeclareerd met behulp van In en Out algemene modifiers. Zie Lijst met typen.
Inherits Optioneel. Geeft aan dat deze interface de kenmerken en leden van een andere interface of interfaces over neemt. Zie Overname-instructie.
interfacenames Vereist als u de Inherits instructie gebruikt. De namen van de interfaces waaruit deze interface is afgeleid.
modifiers Optioneel. De juiste modifiers voor het interfacelid dat wordt gedefinieerd.
Property Optioneel. Hiermee definieert u een eigenschap die lid is van de interface.
Function Optioneel. Definieert een Function procedure die lid is van de interface.
Sub Optioneel. Definieert een Sub procedure die lid is van de interface.
Event Optioneel. Hiermee definieert u een gebeurtenis die lid is van de interface.
Interface Optioneel. Hiermee definieert u een interface die is genest binnen deze interface. De geneste interfacedefinitie moet worden beëindigd met een End Interface instructie.
Class Optioneel. Definieert een klasse die lid is van de interface. De definitie van de lidklasse moet worden beëindigd met een End Class instructie.
Structure Optioneel. Definieert een structuur die lid is van de interface. De definitie van de lidstructuur moet worden beëindigd met een End Structure instructie.
membername Vereist voor elke eigenschap, procedure, gebeurtenis, interface, klasse of structuur die is gedefinieerd als lid van de interface. De naam van het lid.
End Interface Hiermee wordt de Interface definitie beëindigd.

Opmerkingen

Een interface definieert een set leden, zoals eigenschappen en procedures, die klassen en structuren kunnen implementeren. De interface definieert alleen de handtekeningen van de leden en niet hun interne werking.

Een klasse of structuur implementeert de interface door code op te geven voor elk lid dat door de interface is gedefinieerd. Ten slotte bestaat er een object in het geheugen wanneer de toepassing een exemplaar maakt op basis van die klasse of structuur. Zie Objecten en klassen en interfaces voor meer informatie.

U kunt alleen op naamruimte- of moduleniveau gebruiken Interface . Dit betekent dat de declaratiecontext voor een interface een bronbestand, naamruimte, klasse, structuur, module of interface moet zijn en geen procedure of blok kan zijn. Zie Declaratiecontexten en standaardtoegangsniveaus voor meer informatie.

Interfaces worden standaard gebruikt voor toegang tot vrienden . U kunt hun toegangsniveaus aanpassen met de toegangsaanpassingen. Zie Access-niveaus in Visual Basic voor meer informatie.

Regels

  • Geneste interfaces. U kunt de ene interface binnen een andere interface definiëren. De buitenste interface wordt de bijbehorende interface genoemd en de interne interface wordt een geneste interface genoemd.

  • Verklaring van lid. Wanneer u een eigenschap of procedure declareert als lid van een interface, definieert u alleen de handtekening van die eigenschap of procedure. Dit omvat het elementtype (eigenschap of procedure), de parameters en parametertypen en het retourtype. Daarom gebruikt de liddefinitie slechts één regel code en afsluitinstructies zoals End Function of End Property zijn ze niet geldig in een interface.

    Wanneer u daarentegen een opsomming of structuur of geneste klasse of interface definieert, moet u hun gegevensleden opnemen.

  • Lidmodifiers. U kunt geen toegangsmodifiers gebruiken bij het definiëren van moduleleden, noch kunt u gedeelde of procedureaanpassingen opgeven, behalve overloads. U kunt elk lid declareren met Schaduwen en u kunt Standaard gebruiken bij het definiëren van een eigenschap, evenals ReadOnly of WriteOnly.

  • Overname. Als de interface gebruikmaakt van de instructie Overnames, kunt u een of meer basisinterfaces opgeven. U kunt overnemen van twee interfaces, zelfs als ze elk een lid met dezelfde naam definiëren. Als u dit doet, moet de implementatiecode naamkwalificatie gebruiken om op te geven welk lid deze implementeert.

    Een interface kan niet worden overgenomen van een andere interface met een meer beperkend toegangsniveau. Een interface kan bijvoorbeeld Public niet worden overgenomen van een Friend interface.

    Een interface kan niet worden overgenomen van een interface die erin is genest.

  • Uitvoering. Wanneer een klasse de instructie Implements gebruikt om deze interface te implementeren, moet deze elk lid implementeren dat in de interface is gedefinieerd. Bovendien moet elke handtekening in de implementatiecode exact overeenkomen met de bijbehorende handtekening die in deze interface is gedefinieerd. De naam van het lid in de implementatiecode hoeft echter niet overeen te komen met de lidnaam zoals gedefinieerd in de interface.

    Wanneer een klasse een procedure uitvoert, kan deze de procedure niet aanwijzen als Shared.

  • Standaardeigenschap. Een interface kan maximaal één eigenschap opgeven als de standaardeigenschap, waarnaar kan worden verwezen zonder de naam van de eigenschap te gebruiken. U geeft een dergelijke eigenschap op door deze te declareren met de standaardaanpassingsfunctie .

    Dit betekent dat een interface alleen een standaardeigenschap kan definiëren als deze geen eigenschap overgeeft.

Gedrag

  • Toegangsniveau. Alle interfaceleden hebben impliciet openbare toegang. U kunt geen toegangsaanpassing gebruiken bij het definiëren van een lid. Een klasse die de interface implementeert, kan echter een toegangsniveau declareren voor elk geïmplementeerd lid.

    Als u een klasse-exemplaar toewijst aan een variabele, kan het toegangsniveau van de leden ervan afhankelijk zijn van of het gegevenstype van de variabele de onderliggende interface of de implementatieklasse is. In het volgende voorbeeld ziet u dit.

    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()
    

    Als u klasleden opent via varAsInterface, hebben ze allemaal openbare toegang. Als u echter toegang krijgt tot leden via varAsClass, heeft de Sub procedure doSomething privétoegang.

  • Reikwijdte. Een interface valt binnen het bereik van de naamruimte, klasse, structuur of module.

    Het bereik van elk interfacelid is de volledige interface.

  • Levensduur. Een interface heeft zelf geen levensduur, noch zijn leden. Wanneer een klasse een interface implementeert en een object wordt gemaakt als een exemplaar van die klasse, heeft het object een levensduur binnen de toepassing waarin het wordt uitgevoerd. Zie 'Levensduur' in de klasse-instructie voor meer informatie.

Opmerking

In het volgende voorbeeld wordt de instructie gebruikt om een interface met de Interface naam thisInterfacete definiëren, die moet worden geïmplementeerd met een Property instructie en een Function instructie.

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

Houd er rekening mee dat de Property en-instructies Function geen blokken introduceren die eindigen op End Property en End Function binnen de interface. De interface definieert alleen de handtekeningen van de leden. De volledige Property blokken worden Function weergegeven in een klasse die wordt geïmplementeerd thisInterface.

Zie ook