Langage C# – Les méthodes d’extension
D’un point de vue implémentation en C#, une méthode d’extension est une méthode statique contenue dans une classe statique, dont le type du premier paramètre est préfixé par le mot clé this. Ce type représente le type de données étendu. L’utilisation d’une méthode d’extension sur une instance est seulement une simplification d’écriture, car lors de la compilation du code C# en IL (Intermediate Language), la méthode est utilisée comme une méthode statique où l’instance sur laquelle la méthode est appliquée est passée en paramètre.
Les méthodes d’extension sont héritées. Autrement dit, il est possible d’appliquer à une instance d’une classe une méthode d’extension qui étendant une de ses classes de base. Aussi, si une méthode d’extension étend une interface, alors elle est applicable à toutes les instances des classes implémentant cette interface (y compris leurs classes héritées). Via ce principe, en étendant l’interface IEnumerable
Premier exemple : implémentons une méthode d’extension, étendant le type string du Framework .NET, afin d’ajouter une méthode indiquant une variable de ce type contient une donnée numérique :
[cc lang= »csharp »]
namespace System
{
public static class StringExtension
{
public static bool EstNumerique(this string data)
{
// Retour.
return decimal.TryParse(data, out decimal d);
}
}
}
[/cc]
La classe StringExtension est définie dans l’espace de nom System afin de pouvoir être utilisée dans tout le code de l’application. Pour utiliser cette méthode :
[cc lang= »csharp »]
string sData = « 1236 »;
bool estNumerique = sData.EstNumerique();
if (estNumerique)
{
// Bloc de code.
}
else
{
// Bloc de code.
}
[/cc]
Second exemple : implémentons une méthode d’extension, étendant le type IEnumerable
[cc lang= »csharp »]
namespace System
{
public static class ListExtension
{
public static string ToString
{
// Variables locales.
StringBuilder stringBuilder;
// Initialisation.
stringBuilder = new StringBuilder();
// Parcours et concaténation.
foreach (T oObj in aListe)
{
if (stringBuilder.Length > 0)
{
stringBuilder.Append(aCaractereSeparateur);
}
stringBuilder.Append(oObj.ToString());
}
// Retour.
return stringBuilder.ToString();
}
}
}
[/cc]
Pour utiliser cette méthode :
[cc lang= »csharp »]
List
string sConcatenation = oListeChaines.ToString(Environment.NewLine);
[/cc]
A l’issue de l’exécution de ce bloc de code, la variable sConcatenation contient :
Formation
Livre
Support