Delegate, instruction
Permet de déclarer un délégué. Une instruction Delegate est un type référence qui fait référence à une méthode Shared
d’un type ou à une méthode d’instance d’un objet. Toute procédure avec des types de paramètres et de retour correspondants peut être utilisée pour créer une instance de cette classe de délégué. La procédure peut ensuite être appelée par le biais de l’instance de délégué.
Syntaxe
[ <attrlist> ] [ accessmodifier ] _
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]
Éléments
Terme | Définition |
---|---|
attrlist |
Optionnel. Liste des attributs qui s’appliquent à ce délégué. Les attributs multiples sont séparés par des virgules. Vous devez placer la liste d’attributs entre crochets («< » et «> »). |
accessmodifier |
Optionnel. Spécifie le code qui peut accéder au délégué. Il peut s'agir d'une des méthodes suivantes : - Public. Tout code pouvant accéder à l’élément qui déclare le délégué peut y accéder. - Protégé. Seul le code dans la classe du délégué ou une classe dérivée peut y accéder. - Friend. Seul le code dans le même assembly peut accéder au délégué. - Privé. Seul le code dans l’élément qui déclare que le délégué peut y accéder. - Ami protégé code uniquement dans la classe déléguée, une classe dérivée ou le même assembly peut accéder au délégué. - Code protégé privé uniquement dans la classe déléguée ou dans une classe dérivée dans le même assembly peut accéder au délégué. |
Shadows |
Optionnel. Indique que ce délégué déclare de nouveau et masque un élément de programmation nommé identiquement, ou un ensemble d’éléments surchargés, dans une classe de base. Vous pouvez occulter tout type d'élément déclaré par un autre type. Un élément occulté n'est pas disponible à partir de la classe dérivée qui l'occulte, sauf à partir de l'emplacement où l'élément d'occultation est inaccessible. Par exemple, si un élément Private met en mémoire fantôme un élément de classe de base, le code qui n’a pas l’autorisation d’accéder à l’élément Private accède à l’élément de classe de base à la place. |
Sub |
Facultatif, mais Sub ou Function doit apparaître. Déclare cette procédure en tant que procédure déléguée Sub qui ne retourne pas de valeur. |
Function |
Facultatif, mais Sub ou Function doit apparaître. Déclare cette procédure en tant que procédure déléguée Function qui retourne une valeur. |
name |
Obligatoire. Nom du type délégué ; suit les conventions d’affectation de noms de variables standard. |
typeparamlist |
Optionnel. Liste des paramètres de type pour ce délégué. Plusieurs paramètres de type sont séparés par des virgules. Si vous le souhaitez, chaque paramètre de type peut être déclaré variant à l’aide des modificateurs génériques In et Out . Vous devez placer la liste de types entre parenthèses et l’introduire avec le mot clé Of . |
parameterlist |
Optionnel. Liste des paramètres passés à la procédure lorsqu’il est appelé. Vous devez placer la liste de paramètres entre parenthèses. |
type |
Obligatoire si vous spécifiez une procédure Function . Type de données de la valeur de retour. |
Notes
L’instruction Delegate
définit le paramètre et les types de retour d’une classe déléguée. Toute procédure avec des paramètres correspondants et des types de retour peut être utilisée pour créer une instance de cette classe déléguée. La procédure peut ensuite être appelée par le biais de l’instance de délégué, en appelant la méthode Invoke
du délégué.
Les délégués peuvent être déclarés au niveau de l’espace de noms, du module, de la classe ou de la structure, mais pas dans une procédure.
Chaque classe déléguée définit un constructeur auquel les caractéristiques d’une méthode objet sont passées. L’argument d’un constructeur délégué doit être une référence à une méthode ou une expression lambda.
Pour spécifier une référence à une méthode, utilisez la syntaxe suivante :
AddressOf
[expression
.]methodname
Le type de compilation de expression
doit être le nom d’une classe ou d’une interface qui contient une méthode portant le nom spécifié, dont la signature corresponde à celle de la classe déléguée. La méthode methodname
peut être une méthode partagée ou d’instance. methodname
n’est pas facultatif, même si l’on crée un délégué pour la méthode par défaut de la classe.
Pour spécifier une expression lambda, utilisez la syntaxe suivante :
Function
([parm
As type
, parm2
As type2
, ...]) expression
La signature de la fonction doit correspondre à celle du type délégué. Pour plus d’informations sur les expressions lambda, consultez Expressions Lambda.
Pour plus d’informations sur les délégués, consultez Délégués.
Exemple
L’exemple suivant utilise l’instruction Delegate
pour déclarer un délégué afin d’opérer sur deux nombres et retourner un nombre. La méthode DelegateTest
prend une instance d’un délégué de ce type et l’utilise pour opérer sur des paires de nombres.
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