Megosztás a következőn keresztül:


Interfészek (Visual Basic)

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, FriendProtectedvagy Private.

Megjegyzés:

A Shadows kulcsszó minden felülettagra alkalmazható. A Overloads kulcsszó alkalmazható az Subillesztődefinícióban deklarált , Functionés Property utasításokra. Emellett az Property utasításokban lehetnek a Default, ReadOnlyvagy WriteOnly módosítók is. A többi módosító –Public , , Private, FriendProtected, Shared, Overrides, MustOverridevagy 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, ProtectedFriend, Protected FriendMustOverrideDefaultés .Static Az Shared attribútum nem jogi, mivel példánymetódus helyett osztályt határoz meg.

A használatával Implementsegyetlen 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.

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.