Il s'agit de la syntaxe de déclaration des méthodes d'extension, une nouvelle fonctionnalité de C# 3.0.
Une méthode d'extension est une partie du code, une partie de la "magie" du compilateur, où le compilateur, avec l'aide de l'intellisense dans Visual Studio, fait apparaître que votre méthode d'extension est en fait disponible comme une méthode d'instance sur l'objet en question.
Laissez-moi vous donner un exemple.
Aucune méthode de la classe String ne porte le nom de GobbleGobble, alors créons une méthode d'extension :
public static class StringExtensions
{
public static void GobbleGobble(this string s)
{
Console.Out.WriteLine("Gobble Gobble, " + s);
}
}
Le nom de la classe est juste ma convention de dénomination, il n'est pas nécessaire de la nommer ainsi, mais elle doit être statique, tout comme la méthode.
Après avoir déclaré la méthode ci-dessus, vous pouvez, dans Visual Studio, taper ceci :
String s = "Turkey Baster!";
s.
après le point, attendez l'intellisense, et remarquez qu'il y a une méthode GobbleGobble, complétez le code comme ceci :
String s = "Turkey Baster!";
s.GobbleGobble();
Important : La classe où est déclarée la méthode d'extension doit être disponible pour le compilateur et le processeur intellisense afin qu'intellisense affiche la méthode. Si vous tapez GobbleGobble manuellement, et que vous utilisez la fonction Ctrl + . mais il ne vous aidera pas à introduire les bonnes directives d'utilisation dans le fichier.
Remarquez que le paramètre de la méthode a disparu. Le compilateur va déplacer silencieusement les bits importants, qui sont :
String s = "Turkey Baster!";
s.GobbleGobble();
^ ^
| +-- the compiler will find this in the StringExtensions class
|
+-- will be used as the first parameter to the method
Ainsi, le code ci-dessus sera transformé par le compilateur en ceci :
String s = "Turkey Baster!";
StringExtensions.GobbleGobble(s);
Ainsi, au moment de l'appel, il n'y a rien de magique, il s'agit simplement d'un appel à une méthode statique.
Notez que si votre méthode d'extension déclare plus d'un paramètre, seul le premier prend en charge la méthode d'extension. this
et le reste doit être spécifié dans le cadre de l'appel de la méthode, comme d'habitude :
public static void GobbleGobble(this string value, string extra)
{ | |
... | |
} | |
| |
+--------------------------------------------+ |
| |
v |
s.GobbleGobble("extra goes here"); |
^ |
| |
+-----------------------------------+
Les méthodes d'extension ont été ajoutées en partie grâce à Linq, où la syntaxe Linq de C# recherche des méthodes d'extension nommées de manière appropriée pour les objets en jeu, ce qui signifie que vous pouvez "introduire" le support Linq dans n'importe quel type de classe en déclarant simplement les bonnes méthodes d'extension. Bien sûr, le support complet de Linq représente beaucoup de travail, mais c'est possible.
De plus, les méthodes d'extension en elles-mêmes sont vraiment utiles, alors lisez-les.
Voici quelques liens :