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

Voir aussi