Attaquons maintenant une des nouveautés du langage Visual Basic 2005 [VB 9.0] qu'est la "Conversion simplifiée des délégués", aussi appelé "Délégués non stricts" ou si vous préférez en version US "Relaxed Delegates"

  • Qu'est-ce que la Conversion simplifiée des délégués (Délégués non stricts)

La conversion simplifiée des délégués permet d'assigner des méthodes (subs, fonctions) aux délégués ou aux gestionnaires lorsque les signatures (paramètres) ne sont pas identiques.

  • Exemples de Relaxed Delegates

Afin de comprendre rapidement la notion de Relaxed Delegates (conversion simplifiée des délégués).  Prenons l'exemple de l'exploitation d'un évènement "Click" sur un objet de type button.

EN VB 8.0 (.NET 2.0) - VS 2005, vous obteniez le code suivant :

Private Sub Button1_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click

End Sub

Vous remarquez ici la signature de votre méthode qui contient un objet (sender) ainsi qu'un EventArgs (e).  Cette syntaxe constitue bien un Handler valide.

L'écriture suivante engendre par contre une erreur, malgré que nous soyons sur un sous-type de l'EventArgs (précison bien que nous sommes toujours en VB 8.0) :

image

Il en serait de même pour tout délégué dont l'exploitation passerait par une méthode de signature différente... exemple un type Object dans la définition du délégué et un type Integer dans la méthode l'exploitant.

Observez maintenant l'équivalent en VB 9.0 (.NET 2.0) - VS 2008

image

L'écriture telle que recherchée et refusée en VB 8.0 engendre bien dans ce cas-ci en VB 9.0 une validation du compilateur Visual Basic.

Note : mon projet a pourtant bien pour target le .NET Framework 2.0 (cfr explications de mon post sur le multi-targetting)

Observons même l'assembly obtenue au travers de Reflector :

image 

Surprenant non ?  Et encore, nous ne sommes pas encore au bout de nos surprises, pour cause, observez, vous pourrez en arriver à l'écriture suivante :

image

Comme dirait "Garcimore" ... Dichparou :p ... Effectivement, vous pourrez ainsi en arriver au point de faire disparaître complètement la signature de votre méthode !

image

Bien entendue, il en va de même avec vos propres délégués.  Attention toutefois, les délégués simplifiés vous permettent d'omettre les arguments que dans le cas de déclarations qui ne comprennent aucune ambiguïté.

Cette nouveauté vous permettra, vous l'aurez compris, d'associer par exemple à une même méthode deux Handlers dont les signatures sont différentes :

image

Voici quelques liens si vous souhaitez poursuivre le sujet :

Bon code

R.
Member of WygTeam
www.wygwam.com