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 SubFunction 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 SubFunction 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 InOut . 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

Lásd még