Típuslista (Visual Basic)
Egy általános programozási elem típusparamétereit adja meg. Több paramétert vessző választ el egymástól. Az alábbiakban egy típusparaméter szintaxisa található.
Syntax
[genericmodifier] typename [ As constraintlist ]
Részek
Időszak | Definíció |
---|---|
genericmodifier |
Opcionális. Csak általános felületeken és meghatalmazottakban használható. A "Ki" kulcsszóval vagy a Contravarianttal deklarálhat egy kovarians típust az In kulcsszóval. Lásd: Kovariancia és Contravariance. |
typename |
Szükséges. A típusparaméter neve. Ez egy helyőrző, amelyet a megfelelő típusargumentum által megadott típus helyettesít. |
constraintlist |
Opcionális. Azon követelmények listája, amelyek korlátozzák a megadható adattípust typename . Ha több korlátozással rendelkezik, kapcsos zárójelekbe ({ } ) ágyazhatja őket, és vesszővel elválaszthatja őket. A kényszerlistát a Mint kulcsszóval kell bemutatnia. Csak egyszer használja As a lista elején. |
Megjegyzések
Minden általános programozási elemnek legalább egy típusparamétert kell tartalmaznia. A típusparaméter egy adott típus (egy létrehozott elem) helyőrzője, amelyet az ügyfélkód az általános típus példányának létrehozásakor határoz meg. Definiálhat általános osztályt, struktúrát, felületet, eljárást vagy delegáltat.
Az általános típus meghatározásának időpontjáról további információt a Visual Basic Általános típusai című témakörben talál. A típusparaméterek nevével kapcsolatos további információkért lásd: Deklarált elemnevek.
Szabályok
Zárójel. Ha típusparaméter-listát ad meg, zárójelbe kell tennie, és be kell vezetnie a listát az Of kulcsszóval. Csak egyszer használja
Of
a lista elején.Korlátok. A típusparaméterre vonatkozó korlátozások listája a következő elemeket is tartalmazhatja bármilyen kombinációban:
Tetszőleges számú adapter. A megadott típusnak a listában szereplő összes felületet implementálnia kell.
Legfeljebb egy osztályban. A megadott típusnak az adott osztálytól kell örökölnie.
Az
New
kulcsszóból. A megadott típusnak közzé kell tennie egy paraméter nélküli konstruktort, amelyhez az általános típus hozzáférhet. Ez akkor hasznos, ha egy típusparamétert egy vagy több illesztővel korlátoz. Az interfészeket megvalósító típus nem feltétlenül teszi elérhetővé a konstruktort, és a konstruktor hozzáférési szintjétől függően előfordulhat, hogy az általános típuson belüli kód nem fér hozzá.Vagy a
Class
kulcsszó vagy aStructure
kulcsszó. AClass
kulcsszó egy általános típusparaméterre korlátozza, hogy a neki átadott típusargumentum hivatkozástípus legyen, például sztring, tömb vagy delegált, vagy egy osztályból létrehozott objektum. AStructure
kulcsszó egy általános típusparaméterre korlátozza annak megkövetelését, hogy a neki átadott típusargumentum értéktípus legyen, például struktúra, enumerálás vagy elemi adattípus. Egyszerre ésStructure
ugyanabbanconstraintlist
a fájlban nem szerepelhetClass
.
A megadott típusnak minden követelménynek meg kell felelnie, amelybe belefoglalt
constraintlist
.Az egyes típusparaméterekre vonatkozó korlátozások függetlenek más típusparaméterekre vonatkozó korlátozásoktól.
Működés
Fordítási idő helyettesítése. Amikor egy általános programozási elemből létrehoz egy létrehozott típust, minden típusparaméterhez meg kell adnia egy meghatározott típust. A Visual Basic fordító a megadott típust helyettesíti az általános elem minden előfordulásához
typename
.Korlátozások hiánya. Ha nem ad meg semmilyen korlátozást egy típusparaméterre vonatkozóan, a kód az adott típusparaméter Objektum adattípusa által támogatott műveletekre és tagokra korlátozódik.
1. példa
Az alábbi példa egy általános szótárosztály csontvázdefinícióját mutatja be, beleértve egy csontvázfüggvényt is, amely új bejegyzést ad hozzá a szótárhoz.
Public Class dictionary(Of entryType, keyType As {IComparable, IFormattable, New})
Public Sub add(ByVal et As entryType, ByVal kt As keyType)
Dim dk As keyType
If kt.CompareTo(dk) = 0 Then
End If
End Sub
End Class
2. példa
Mivel dictionary
általános, az azt használó kód számos objektumot hozhat létre belőle, amelyek mindegyike ugyanazzal a funkcióval rendelkezik, de más adattípuson működik. Az alábbi példa egy kódsort mutat be, amely bejegyzéseket és Integer
kulcsokat tartalmazó String
objektumot hoz létredictionary
.
Dim dictInt As New dictionary(Of String, Integer)
3. példa
Az alábbi példa az előző példában létrehozott egyenértékű csontvázdefiníciót mutatja be.
Public Class dictionary
Public Sub Add(ByVal et As String, ByVal kt As Integer)
Dim dk As Integer
If kt.CompareTo(dk) = 0 Then
End If
End Sub
End Class