Delegálási utasítás
Meghatalmazott deklarálására szolgál. A meghatalmazott olyan referenciatípus, amely egy típus vagy egy objektum példánymetódusára hivatkozik Shared
. A delegált osztály egy példányának létrehozásához bármely egyező paraméterrel és visszatérési típussal rendelkező eljárás használható. Az eljárást később a meghatalmazott példányon lehet meghívni.
Syntax
[ <attrlist> ] [ accessmodifier ] _
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]
Részek
Időszak | Definíció |
---|---|
attrlist |
Opcionális. A meghatalmazottra vonatkozó attribútumok listája. Több attribútumot vessző választ el egymástól. Az attribútumlistát szögletes zárójelek ("< " és "> ") közé kell foglalnia. |
accessmodifier |
Opcionális. Megadja, hogy milyen kód férhet hozzá a meghatalmazotthoz. A következők egyike lehet: - Nyilvános. Bármely kód, amely hozzáfér a meghatalmazott által deklarált elemhez, hozzáférhet hozzá. - Védett. Csak a meghatalmazott osztályán belüli kód vagy származtatott osztály férhet hozzá. - Barátom. Csak az ugyanazon a szerelvényen belüli kód férhet hozzá a meghatalmazotthoz. - Privát. Csak a meghatalmazottat deklaráló elemen belüli kód férhet hozzá. - A meghatalmazott osztályán belül csak védett barátkód , származtatott osztály vagy ugyanaz a szerelvény férhet hozzá a meghatalmazotthoz. - A meghatalmazott osztályában vagy egy származtatott osztályban lévő csak privát védett kód hozzáférhet a delegálthoz. |
Shadows |
Opcionális. Azt jelzi, hogy ez a delegált újradelegálja és elrejt egy azonos nevű programozási elemet vagy túlterhelt elemeket egy alaposztályban. Bármilyen deklarált elemet bármilyen más típussal árnyékba helyezhet. Az árnyékolt elem nem érhető el az árnyékoló származtatott osztályon belül, kivéve, ha az árnyékoló elem elérhetetlen. Ha például egy Private elem árnyékolást végez egy alaposztályelemen, az elem elérésére Private nem jogosult kód ehelyett az alaposztályelemhez fér hozzá. |
Sub |
Nem kötelező, de vagy meg Sub Function kell jelennie. Deklarálja ezt az eljárást delegálási Sub eljárásként, amely nem ad vissza értéket. |
Function |
Nem kötelező, de vagy meg Sub Function kell jelennie. Deklarálja ezt az eljárást delegálási Function eljárásként, amely egy értéket ad vissza. |
name |
Szükséges. A meghatalmazott típusának neve; a standard változók elnevezési konvencióit követi. |
typeparamlist |
Opcionális. A meghatalmazott típusparamétereinek listája. Több típusparamétert vessző választ el egymástól. Opcionálisan az egyes típusparaméterek variánsként deklarálhatók általános módosítók használatával In Out . Zárójelbe kell tennie a típuslistát , és be kell vezetnie a Of kulcsszóval. |
parameterlist |
Opcionális. Az eljárásnak a meghíváskor átadott paraméterek listája. Zárójelbe kell tennie a paraméterlistát . |
type |
Eljárás megadása Function esetén kötelező. A visszatérési érték adattípusa. |
Megjegyzések
Az Delegate
utasítás meghatározza a delegált osztály paraméterét és visszatérési típusait. A delegált osztály egy példányának létrehozásához bármely olyan eljárás használható, amely megfelel a paramétereknek és a visszatérési típusoknak. Az eljárás később meghívható a meghatalmazott példányával, a meghatalmazott metódusának Invoke
meghívásával.
A meghatalmazottak deklarálhatók névtéren, modulon, osztályon vagy struktúraszinten, de eljáráson belül nem.
Minden delegált osztály meghatároz egy konstruktort, amely megfelel egy objektummetódus specifikációjának. A delegált konstruktor argumentumának egy metódusra vagy lambdakifejezésre való hivatkozásnak kell lennie.
Metódusra mutató hivatkozás megadásához használja a következő szintaxist:
AddressOf
[expression
.]methodname
A fordítási idő típusának expression
egy osztálynak vagy interfésznek kell lennie, amely a megadott név olyan metódusát tartalmazza, amelynek aláírása megegyezik a delegált osztály aláírásával. Ez methodname
lehet megosztott vagy példánymetódus. Ez methodname
nem kötelező, még akkor sem, ha létrehoz egy meghatalmazottat az osztály alapértelmezett metódusához.
Lambda-kifejezés megadásához használja a következő szintaxist:
Function
([parm
As type
, parm2
As type2
, ...]) expression
A függvény aláírásának meg kell egyeznie a meghatalmazott típusával. További információ a lambdakifejezésekről: Lambda Expressions.
A meghatalmazottakról további információt a Meghatalmazottak című témakörben talál.
Példa
Az alábbi példa az Delegate
utasítással deklarál egy meghatalmazottat, aki két számon működik, és egy számot ad vissza. A DelegateTest
metódus egy ilyen típusú delegált példányt használ, és számpárokon való működésre használja.
Delegate Function MathOperator(
ByVal x As Double,
ByVal y As Double
) As Double
Function AddNumbers(
ByVal x As Double,
ByVal y As Double
) As Double
Return x + y
End Function
Function SubtractNumbers(
ByVal x As Double,
ByVal y As Double
) As Double
Return x - y
End Function
Sub DelegateTest(
ByVal x As Double,
ByVal op As MathOperator,
ByVal y As Double
)
Dim ret As Double
ret = op.Invoke(x, y) ' Call the method.
MsgBox(ret)
End Sub
Protected Sub Test()
DelegateTest(5, AddressOf AddNumbers, 3)
DelegateTest(9, AddressOf SubtractNumbers, 3)
End Sub