Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 passar bättre för situationer där dina program kräver många typer av orelaterade objekt 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 implementeringen 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 instruktionen Interface
och End Interface
. Efter -instruktionen Interface
kan du lägga till en valfri Inherits
instruktion som visar en eller flera ärvda gränssnitt. Satserna Inherits
måste komma före alla andra instruktioner i deklarationen förutom kommentarer. De återstående uttrycken i gränssnittsdefinitionen ska vara Event
, Sub
, Function
, Property
, 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å uttryckligen deklareras 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
.
Anmärkning
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 kan Property
-satser ha de Default
, ReadOnly
eller WriteOnly
modifierarna. Ingen av de andra modifierarna –Public
, Private
, Friend
, Protected
, Shared
, Overrides
, MustOverride
eller Overridable
– tillåts. 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 reserverade ordet Implements
Visual Basic används på två sätt. -instruktionen Implements
innebär att en klass eller struktur implementerar ett gränssnitt. Nyckelordet Implements
betyder 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 inkludera -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 nyckelordet Implements
.
Implementerar nyckelord
Nyckelordet Implements
kräver att en kommaavgränsad lista över gränssnittsmedlemmar implementeras. I allmänhet anges endast en enskild gränssnittsmedlem, men du kan ange flera medlemmar. Specifikationen för 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 den InterfaceName_MethodName
konvention 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 för 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
, Friend
, Protected Friend
, MustOverride
, , Default
och Static
. Attributet Shared
är inte lagligt eftersom det definierar en klass snarare än 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 den 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 Interface2
, inklusive en metod som ärvts 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 readonly-egenskap med en läs-/skriv-egenskap (det vill säga att du inte behöver deklarera den readonly i implementeringsklassen). Att implementera ett gränssnitt lovar att implementera åtminstone de medlemmar som gränssnittet deklarerar, men du kan erbjuda fler funktioner, till exempel att tillåta att din egenskap kan skrivas.
Relaterade ämnen
Titel | 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 kontravariant i generiska gränssnitt och innehåller en lista över generiska variantgränssnitt i .NET Framework. |