Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az interfészek határozzák meg az osztályok által implementálható tulajdonságokat, metódusokat és eseményeket. Az interfészek lehetővé teszik a funkciók definiálását szoros kapcsolatban álló tulajdonságok, metódusok és események kis csoportjaiként; ez csökkenti a kompatibilitási problémákat, mivel a meglévő kód veszélyeztetése nélkül fejleszthet továbbfejlesztett implementációkat a felületekhez. Új funkciókat bármikor hozzáadhat további felületek és implementációk fejlesztésével.
Több más oka is lehet annak, hogy az osztályöröklés helyett interfészeket szeretne használni:
Az interfészek jobban megfelelnek azoknak a helyzeteknek, amikor az alkalmazások számos, esetleg nem kapcsolódó objektumtípust igényelnek bizonyos funkciók biztosításához.
A felületek rugalmasabbak, mint az alaposztályok, mivel egyetlen olyan implementációt definiálhat, amely több interfészt is implementálhat.
Az interfészek jobbak olyan helyzetekben, amikor nem kell örökölnie az implementációt egy alaposztályból.
Az interfészek akkor hasznosak, ha nem használhat osztályöröklést. A struktúrák például nem örökölhetnek az osztályoktól, de interfészeket implementálhatnak.
Felületek deklarálása
Az illesztődefiníciók a Interface
és End Interface
utasítások közé vannak zárva. Az utasítást Interface
követve hozzáadhat egy választható Inherits
utasítást, amely egy vagy több örökölt felületet sorol fel. Az Inherits
utasításoknak meg kell előznie a nyilatkozat összes többi állítását, kivéve a megjegyzéseket. A felületdefiníció többi utasításának a következőnek kell lennie Event
: , Sub
, Function
, Property
, Interface
, Class
, , Structure
, és Enum
utasítások. A csatolók nem tartalmazhatnak implementációs kódot vagy implementálási kódhoz társított utasításokat, például End Sub
vagy End Property
.
A névtérben a felület utasítások alapértelmezés szerint Friend
, de kifejezetten Public
vagy Friend
is deklarálhatók. Az osztályokon, modulokon, interfészeken és struktúrákon belül definiált interfészek alapértelmezés szerint, Public
de explicit módon deklarálhatók Public
, Friend
Protected
vagy Private
.
Megjegyzés:
A Shadows
kulcsszó minden felülettagra alkalmazható. A Overloads
kulcsszó alkalmazható az Sub
illesztődefinícióban deklarált , Function
és Property
utasításokra. Emellett az Property
utasításokban lehetnek a Default
, ReadOnly
vagy WriteOnly
módosítók is. A többi módosító –Public
, , Private
, Friend
Protected
, Shared
, Overrides
, MustOverride
vagy Overridable
– nem engedélyezett. További információ: Deklarációs környezetek és alapértelmezett hozzáférési szintek.
Az alábbi kód például egy függvényt, egy tulajdonságot és egy eseményt tartalmazó felületet határoz meg.
Interface IAsset
Event ComittedChange(ByVal Success As Boolean)
Property Division() As String
Function GetID() As Integer
End Interface
Implementálási felületek
A Visual Basic fenntartott szó Implements
kétféleképpen használható. Az Implements
utasítás azt jelzi, hogy egy osztály vagy struktúra egy felületet implementál. A Implements
kulcsszó azt jelzi, hogy egy osztálytag vagy struktúratag egy adott illesztőtagot implementál.
Megvalósítási nyilatkozat
Ha egy osztály vagy struktúra egy vagy több interfészt implementál, az Implements
utasításnak közvetlenül a Class
vagy Structure
utasítás után kell következnie. Az Implements
utasítás megköveteli, hogy egy osztály vesszővel tagolt interfészlistát implementáljon. Az osztályoknak vagy struktúráknak a Implements
kulcsszó használatával kell implementálniuk az interfész összes tagját.
Implementálja a kulcsszót
A Implements
kulcsszóhoz a felülettagok vesszővel tagolt listáját kell implementálnia. Általában csak egyetlen illesztőtag van megadva, de több tagot is megadhat. Az illesztőtag specifikációja az interfész nevéből áll, amelyet az osztályon belüli implementálási utasításban kell megadni; egy időszak; és a megvalósítandó tagfüggvény, tulajdonság vagy esemény neve. Az illesztőtagot megvalósító tag neve bármilyen jogi azonosítót használhat, és nem korlátozódik a InterfaceName_MethodName
Visual Basic korábbi verzióiban használt konvenciókra.
Az alábbi kód például bemutatja, hogyan deklarálhat egy olyan alrutint, Sub1
amely egy interfész metódusát implementálja:
Class Class1
Implements interfaceclass.interface2
Sub Sub1(ByVal i As Integer) Implements interfaceclass.interface2.Sub1
End Sub
End Class
A implementáló tag paramétertípusainak és visszatérési típusainak meg kell egyeznie az interfész tulajdonságával vagy tagdeklarációval a felületen. Az interfész elemeinek implementálásának leggyakoribb módja az, ha egy tag neve megegyezik az illesztő nevével, ahogy az előző példában is látható.
Az interfészmetódus implementációjának deklarálásához a példánymetódus-deklarációkban érvényes attribútumokat használhatja, beleértve a Overloads
, Overrides
, Overridable
, Public
, Private
, Protected
Friend
, Protected Friend
MustOverride
Default
és .Static
Az Shared
attribútum nem jogi, mivel példánymetódus helyett osztályt határoz meg.
A használatával Implements
egyetlen metódust is írhat, amely egy felületen definiált több metódust implementál, ahogyan az alábbi példában is látható:
Class Class2
Implements I1, I2
Protected Sub M1() Implements I1.M1, I1.M2, I2.M3, I2.M4
End Sub
End Class
Egy privát taggal implementálhat egy interfész tagját. Amikor egy privát tag implementálja az illesztő egy tagját, a tag az interfészen keresztül válik elérhetővé, még akkor is, ha az nem érhető el közvetlenül az osztály objektumváltozóinál.
Példa a felület implementálására
Az interfészt megvalósító osztályoknak minden tulajdonságát, metódusát és eseményét implementálniuk kell.
Az alábbi példa két interfészt határoz meg. A második felület, Interface2
, örököl Interface1
-t, és meghatároz egy további tulajdonságot és metódust.
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
A következő példa az előző példában definiált felületet implementálja Interface1
:
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
Az utolsó példa implementálja a Interface2
, beleértve egy Interface1
-től örökölt metódust:
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
Egy írásvédett tulajdonságot implementálhat egy olvasható és írható tulajdonsággal is (vagyis nem kell azt írásvédettként deklarálnia az implementáló osztályban). Az interfész implementálása azt ígéri, hogy legalább azokat a tagokat implementálja, amelyeket az interfész deklarál, de több funkciót is kínálhat, például lehetővé teszi a tulajdonság írhatóvá helyezését.
Kapcsolódó témakörök
Cím | Leírás |
---|---|
Útmutató: Interfészek létrehozása és implementálása | Részletes eljárást biztosít, amely végigvezeti a saját felület meghatározásának és implementálásának folyamatán. |
Variancia az általános felületeken | A kovarianciát és a contravariance-t tárgyalja az általános felületeken, és a .NET-keretrendszerben megjeleníti a variáns általános interfészek listáját. |