Dela via


Gränssnitt (Visual Basic)

Gränssnitt definierar de egenskaper, metoder och händelser som klasser kan implementera. Med gränssnitt kan du definiera funktioner som små grupper med nära relaterade egenskaper, metoder och händelser. Detta minskar kompatibilitetsproblemen eftersom du kan utveckla förbättrade implementeringar för dina gränssnitt utan att äventyra befintlig kod. Du kan lägga till nya funktioner när som helst genom att utveckla ytterligare gränssnitt och implementeringar.

Det finns flera andra orsaker till varför du kanske vill använda gränssnitt i stället för klassarv:

  • Gränssnitt är bättre lämpade för situationer där dina program kräver många eventuellt orelaterade objekttyper för att tillhandahålla vissa funktioner.

  • Gränssnitt är mer flexibla än basklasser eftersom du kan definiera en enda implementering som kan implementera flera gränssnitt.

  • Gränssnitt är bättre i situationer där du inte behöver ärva implementering från en basklass.

  • Gränssnitt är användbara när du inte kan använda klassarv. Strukturer kan till exempel inte ärva från klasser, men de kan implementera gränssnitt.

Deklarera gränssnitt

Gränssnittsdefinitioner omges av Interface instruktionerna och End Interface . Efter -instruktionen Interface kan du lägga till en valfri Inherits -instruktion som visar ett eller flera ärvda gränssnitt. Instruktionerna Inherits måste föregå alla andra påståenden i deklarationen förutom kommentarer. Återstående instruktioner i gränssnittsdefinitionen ska vara Event- , Sub, PropertyFunction, Interface, Class, , Structureoch Enum -instruktioner. Gränssnitt får inte innehålla någon implementeringskod eller -instruktioner som är associerade med implementeringskod, till exempel End Sub eller End Property.

I ett namnområde är Friend gränssnittsinstruktioner som standard, men de kan också deklareras uttryckligen som Public eller Friend. Gränssnitt som definieras i klasser, moduler, gränssnitt och strukturer är Public som standard, men de kan också uttryckligen deklareras som Public, Friend, Protectedeller Private.

Anteckning

Nyckelordet Shadows kan tillämpas på alla gränssnittsmedlemmar. Nyckelordet Overloads kan tillämpas på Sub, Functionoch Property -instruktioner som deklareras i en gränssnittsdefinition. Dessutom Property kan -instruktioner ha Defaultmodifierarna , ReadOnlyeller WriteOnly . Ingen av de andra modifierarna –Public , Private, Friend, Protected, SharedOverrides, , MustOverrideeller Overridable– är tillåtna. Mer information finns i Deklarationskontexter och Standardåtkomstnivåer.

Följande kod definierar till exempel ett gränssnitt med en funktion, en egenskap och en händelse.

Interface IAsset
    Event ComittedChange(ByVal Success As Boolean)
    Property Division() As String
    Function GetID() As Integer
End Interface

Implementera gränssnitt

Det Visual Basic reserverade ordet Implements används på två sätt. -instruktionen Implements innebär att en klass eller struktur implementerar ett gränssnitt. Nyckelordet Implements innebär att en klassmedlem eller strukturmedlem implementerar en specifik gränssnittsmedlem.

Implementerar instruktion

Om en klass eller struktur implementerar ett eller flera gränssnitt måste den innehålla -instruktionen Implements omedelbart efter instruktionen Class eller Structure . Instruktionen Implements kräver att en kommaavgränsad lista över gränssnitt implementeras av en klass. Klassen eller strukturen måste implementera alla gränssnittsmedlemmar med hjälp av nyckelordet Implements .

Implementerar nyckelord

Nyckelordet Implements kräver att en kommaavgränsad lista över gränssnittsmedlemmar implementeras. I allmänhet anges endast en enda gränssnittsmedlem, men du kan ange flera medlemmar. Specifikationen av en gränssnittsmedlem består av gränssnittsnamnet, som måste anges i en implementeringsinstruktor inom klassen; en period. och namnet på medlemsfunktionen, egenskapen eller händelsen som ska implementeras. Namnet på en medlem som implementerar en gränssnittsmedlem kan använda alla juridiska identifierare, och det är inte begränsat till konventionen InterfaceName_MethodName som används i tidigare versioner av Visual Basic.

Följande kod visar till exempel hur du deklarerar en underrutin med namnet Sub1 som implementerar en -metod i ett gränssnitt:

Class Class1
    Implements interfaceclass.interface2

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

Parametertyperna och returtyperna för implementeringsmedlemmen måste matcha gränssnittsegenskapen eller medlemsdeklarationen i gränssnittet. Det vanligaste sättet att implementera ett element i ett gränssnitt är med en medlem som har samma namn som gränssnittet, som du ser i föregående exempel.

Om du vill deklarera implementeringen av en gränssnittsmetod kan du använda alla attribut som är lagliga för instansmetoddeklarationer, inklusive Overloads, Overrides, Overridable, Public, Private, Protected, Protected FriendFriend, MustOverride, , Defaultoch Static. Attributet Shared är inte lagligt eftersom det definierar en klass i stället för en instansmetod.

Med kan Implementsdu också skriva en enda metod som implementerar flera metoder som definierats i ett gränssnitt, som i följande exempel:

Class Class2
    Implements I1, I2

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

Du kan använda en privat medlem för att implementera en gränssnittsmedlem. När en privat medlem implementerar en medlem i ett gränssnitt blir medlemmen tillgänglig via gränssnittet även om den inte är tillgänglig direkt på objektvariabler för klassen.

Exempel på gränssnittsimplementering

Klasser som implementerar ett gränssnitt måste implementera alla dess egenskaper, metoder och händelser.

I följande exempel definieras två gränssnitt. Det andra gränssnittet, Interface2, ärver Interface1 och definierar ytterligare en egenskap och metod.

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

I nästa exempel implementeras Interface1, gränssnittet som definierades i föregående exempel:

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

Det sista exemplet implementerar , inklusive en metod som ärvts Interface2från 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

Du kan implementera en skrivskyddad egenskap med en skrivskyddad egenskap (det vill säga att du inte behöver deklarera den skrivskyddat i implementeringsklassen). Implementering av ett gränssnitt lovar att implementera åtminstone de medlemmar som gränssnittet deklarerar, men du kan erbjuda fler funktioner, till exempel att låta din egenskap vara skrivbar.

Rubrik Beskrivning
Genomgång: Skapa och implementera gränssnitt Innehåller en detaljerad procedur som tar dig igenom processen att definiera och implementera ditt eget gränssnitt.
Varians i allmänna gränssnitt Diskuterar kovarians och kontravarians i generiska gränssnitt och innehåller en lista över generiska variantgränssnitt i .NET Framework.