Ces méthodes statiques jouent bien leur rôle. Mais il est possible de faire en sorte que ces deux méthodes deviennent des méthodes d’extensions de la classe
string. Il suffit d’utiliser le mot-clé
this devant le premier paramètre de la méthode afin de créer une méthode d’extension :
Code : C# 1
2
3
4
5
6
7
8
9
10
11
12 | public static class Encodage
{
public static string Crypte(this string chaine)
{
return Convert.ToBase64String(Encoding.Default.GetBytes(chaine));
}
public static string Decrypte(this string chaine)
{
return Encoding.Default.GetString(Convert.FromBase64String(chaine));
}
}
|
Nous pourrons désormais utiliser ces méthodes comme si elles faisaient parties de la classe
String :
Code : C# | string chaineNormale = "Bonjour à tous";
string chaineCryptee = chaineNormale.Crypte();
Console.WriteLine(chaineCryptee);
chaineNormale = chaineCryptee.Decrypte();
Console.WriteLine(chaineNormale);
|
Pas mal non ?
De plus, si nous regardons dans la complétion automatique, nous pourrons voir apparaître nos fameuses méthodes :
Plutôt pratique.
Évidemment, en créant une méthode d’extension, nous n’avons bien sûr pas accès aux méthodes privées ou variables membres internes à la classe. La preuve, les méthodes d’extensions sont des méthodes statiques qui travaillent hors de toute instance de classe.
Ces méthodes doivent donc être statiques et situées à l’intérieur d’une classe statique.
Par contre, il faut faire attention à l’espace de nom où se situent nos méthodes d’extensions. Si le
using correspondant n’est pas inclus, nous ne verrons pas les méthodes d’extension.
Remarquez que les méthodes d’extension fonctionnent aussi avec les interfaces. Plus précisément, elles viennent étendre toutes les classes qui implémentent une interface.
Par exemple, avec deux classes implémentant l’interface
IVolant :
Code : C# 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | public interface IVolant
{
void Voler();
}
public class Oiseau : IVolant
{
public void Voler()
{
Console.WriteLine("Je vole");
}
}
public class Avion : IVolant
{
public void Voler()
{
Console.WriteLine("Je vole");
}
}
|
si je crée une méthode d’extension prenant en paramètres un
IVolant, préfixé par
this :
Code : C# | public static class Extentions
{
public static void Atterir(this IVolant volant)
{
Console.WriteLine("J'attéris");
}
}
|
je pourrais accéder à cette méthode pour les objets
Avion et
Oiseau :
Code : C# | Avion a = new Avion();
Oiseau b = new Oiseau();
a.Atterir();
b.Atterir();
|
À noter que le framework .NET se sert de ceci pour proposer un grand nombre de méthodes d’extension sur les objets implémentant
IEnumerable, nous les étudierons un peu plus tard.