Avertissement : ce tutoriel est pour un niveau avancé de VB.NET
Ce tutoriel, parlant des délégées, je parlerais également des Expressions Lambda
Les déléguées sont des sortes de fonctions dans des variables (un peut à la manière des pointeurs en C, sauf que c'est géré par le CLR), comme beaucoup de variables (du moins en C#), ils ont un type.
Pour faire un type de délégué, ça ressemble beaucoup à un début de fonction.
Code:
[lang=vbnet]Delegate [Sub/Function] NomDuTypeDelegate(<Paramètres, de la même façon qu'une méthode>)Sub doit être utilisé pour les fonction sans valeurs de retour
Function doit être utilisé si il y a une valeur de retour
Ce type, comme tout les types que l'on pourrais créer en VBNET (Module, Class, Struct ...), doivent être fais hors d'une fonction, de plus, on peut y ajouter des modificateurs d’accès (Public, Private, Protected, ...) excepté Static (ce serait incohérent)
Pour créer un délégante, il y a plusieurs solution :
Une fonction qui possède les paramètres avec le mot clé AddressOf:
Code:
[lang=vbnet]Delegate Sub ChangerNomDelegate(name As String, age As Integer)Sub Fonction(name As String, age As Integer)
Console.WriteLine("Je suis {0} et j'ai {1} ans", name, age)
End Sub
Sub Main()
Dim MonDelegate As ChangerNomDelegate
MonDelegate = AddressOf Fonction
Console.Read()
End Sub
Avec une expréssion lambda, expliqué plus bas.
Ces délégates seront utilisées comme des fonctions et même manipulables (voir le type [Delegate] dans l'IDE pour plus de détails) :
Code:
[lang=vbnet]MonDelegate("Napoléon Bonaparte", 78)Utilisation
Utilisation, une grande partie dans les Events, mais surtout, dans le Multi-Threading/Parralel
Exemple pour un Thread :
Code:
[lang=vbnet]Sub SurUnAutreThread()Console.WriteLine("Bonjour depuis un autre thread !")
End Sub
Sub Main()
Dim UnThread As Thread = New Thread(AddressOf SurUnAutreThread)
UnThread.Start()
Console.Read()
End Sub
Les expressions lambda
Pour créer une expression lambda :
Code:
[lang=vbnet]Dim Nom As TypeDelegate = [Sub/Function](<Paramètres (le type n'est pas obligatoire)>)' Instructions
End [Sub/Function]
Les expressions lambda permettent de créer un delegate avec une fonction que l'on écrit dans le code, la plupart du temps, les variables locales de la fonction où il y a l'expression lambda sont liées, ce qui veut dire que :
Code:
[lang=vbnet]Dim i = 0Dim TestDelegate As Action = Sub()
Console.WriteLine(i)
End Sub
For index = 1 To 10
i = index
TestDelegate()
Next
Renverra une série de chiffres allant de 1 à 10
______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.