Les méthodes d'extension
Ajout de nouvelles méthodes à un type
04/07/2011
959 lectures
0 commentaire
Il ne faut pas voir les méthodes d’extension comme une nouveauté d’une version du Framework, mais plutôt comme une nouveauté de Visual Studio 2008. Celles-ci permettent en fait « d’étendre » un certain type en lui ajoutant une ou plusieurs méthodes. Imaginez par exemple le code suivant :
Ici, nous avons juste déclaré une méthode nommée « Repeat » qui permet de répéter une chaîne de caractères plusieurs fois. Cette méthode est assez pratique et il aurait été relativement utile qu’elle soit incluse dans le type « string » pour que nous puissions par exemple remplacer la ligne où on l’utilise par :
Et de cette manière pouvoir appeler la méthode « Repeat » directement sur un objet de type « string ». C’est précisément à cela que servent les méthodes d’extension. Elles vont permettre de simuler qu’une méthode donnée fait partie d’un type. Pour ce faire, il suffit d’isoler la méthode en question dans une classe statique car cette méthode doit également être statique. Enfin, le premier paramètre de la méthode définira sur quel type cette méthode viendra se greffer. Pour ce faire, il suffira de précéder le type de l’argument par le mot-clé « this » :
Voyez qu’ici, nous pouvons directement appeler la méthode « Repeat » sur un objet de type « string » car le premier paramètre de cette méthode (précédé de « this ») est du type « string ».
Remarquez que l’IntelliSense vous propose bien la fonction « Repeat » mais que l’icône de celle-ci possède une petite flèche bleue vers le bas indiquant qu’il s’agit d’une méthode d’extension.
Bien que les méthodes d’extension soient très pratiques, il y a certaines choses à savoir. Tout d’abord, ce n’est qu’une simulation. En fait, le type « string » n’est absolument pas modifié de quelques manières que ce soit, c’est juste une astuce de Visual Studio qui permet d’utiliser les méthodes d’extension. Au final, le code IL généré fera appel à la méthode « Repeat » en tant que méthode statique comme dans notre premier exemple. De ce fait, l’encapsulation n’est pas influencée. Effectivement, bien qu’une méthode d’extension semble appartenir directement au type, celle-ci n’aura en aucun cas accès aux membres privés du type en question.
Visual Studio ne peut pas savoir où une méthode d’extension peut être implémentée. Autrement dit, si vous n’ajoutez pas la clause « using » correspondant au « namespace » dans lequel votre méthode d’extension est déclarée, Visual Studio vous dira simplement qu’aucune méthode « Repeat » (ou autre) n’existe. Enfin, il faut savoir quand utiliser une méthode d’extension et quand ne pas l’utiliser. En effet, il est très confortable de pouvoir utiliser une méthode directement sur un objet d’une certain type, cependant, avant de créer une méthode d’extension, il faut se demander si cette méthode pourrait être utile à quelqu’un d’autre dans un autre type de projet. En effet, les méthodes du type « string » (par exemple) sont utiles et peuvent l’être dans n’importe quel situation. Si vous développez une méthode d’extension qui n’est utilisable que dans votre projet, nous vous conseillons d’en faire une méthode traditionnelle.
Télécharger les sources de l'exemple
Ici, nous avons juste déclaré une méthode nommée « Repeat » qui permet de répéter une chaîne de caractères plusieurs fois. Cette méthode est assez pratique et il aurait été relativement utile qu’elle soit incluse dans le type « string » pour que nous puissions par exemple remplacer la ligne où on l’utilise par :
Et de cette manière pouvoir appeler la méthode « Repeat » directement sur un objet de type « string ». C’est précisément à cela que servent les méthodes d’extension. Elles vont permettre de simuler qu’une méthode donnée fait partie d’un type. Pour ce faire, il suffit d’isoler la méthode en question dans une classe statique car cette méthode doit également être statique. Enfin, le premier paramètre de la méthode définira sur quel type cette méthode viendra se greffer. Pour ce faire, il suffira de précéder le type de l’argument par le mot-clé « this » :
Voyez qu’ici, nous pouvons directement appeler la méthode « Repeat » sur un objet de type « string » car le premier paramètre de cette méthode (précédé de « this ») est du type « string ».
Remarquez que l’IntelliSense vous propose bien la fonction « Repeat » mais que l’icône de celle-ci possède une petite flèche bleue vers le bas indiquant qu’il s’agit d’une méthode d’extension.
Bien que les méthodes d’extension soient très pratiques, il y a certaines choses à savoir. Tout d’abord, ce n’est qu’une simulation. En fait, le type « string » n’est absolument pas modifié de quelques manières que ce soit, c’est juste une astuce de Visual Studio qui permet d’utiliser les méthodes d’extension. Au final, le code IL généré fera appel à la méthode « Repeat » en tant que méthode statique comme dans notre premier exemple. De ce fait, l’encapsulation n’est pas influencée. Effectivement, bien qu’une méthode d’extension semble appartenir directement au type, celle-ci n’aura en aucun cas accès aux membres privés du type en question.
Visual Studio ne peut pas savoir où une méthode d’extension peut être implémentée. Autrement dit, si vous n’ajoutez pas la clause « using » correspondant au « namespace » dans lequel votre méthode d’extension est déclarée, Visual Studio vous dira simplement qu’aucune méthode « Repeat » (ou autre) n’existe. Enfin, il faut savoir quand utiliser une méthode d’extension et quand ne pas l’utiliser. En effet, il est très confortable de pouvoir utiliser une méthode directement sur un objet d’une certain type, cependant, avant de créer une méthode d’extension, il faut se demander si cette méthode pourrait être utile à quelqu’un d’autre dans un autre type de projet. En effet, les méthodes du type « string » (par exemple) sont utiles et peuvent l’être dans n’importe quel situation. Si vous développez une méthode d’extension qui n’est utilisable que dans votre projet, nous vous conseillons d’en faire une méthode traditionnelle.
Télécharger les sources de l'exemple


0 commentaires
Ajouter un commentaire