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
, Property
Function
, Interface
, Class
, , Structure
och 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
, Protected
eller Private
.
Anteckning
Nyckelordet Shadows
kan tillämpas på alla gränssnittsmedlemmar. Nyckelordet Overloads
kan tillämpas på Sub
, Function
och Property
-instruktioner som deklareras i en gränssnittsdefinition. Dessutom Property
kan -instruktioner ha Default
modifierarna , ReadOnly
eller WriteOnly
. Ingen av de andra modifierarna –Public
, Private
, Friend
, Protected
, Shared
Overrides
, , MustOverride
eller 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 Friend
Friend
, MustOverride
, , Default
och Static
. Attributet Shared
är inte lagligt eftersom det definierar en klass i stället för en instansmetod.
Med kan Implements
du 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 Interface2
frå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.
Relaterade ämnen
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. |