Guide pratique pour implémenter et appeler une méthode d’extension personnalisée (Guide de programmation C#)
Cet article montre comment mettre en œuvre vos propres méthodes d'extension pour n'importe quel type .NET. Le code client peut utiliser vos méthodes d'extension. Les projets clients doivent faire référence à l'assemblage qui les contient. Les projets clients doivent ajouter une directive using qui spécifie l'espace de noms dans lequel les méthodes d'extension sont définies.
Pour définir et appeler la méthode d'extension :
- Définissez une classe statiquepour contenir la méthode d’extension. La classe ne peut pas être imbriquée dans un autre type et doit être visible par le code client. Pour plus d’informations sur les règles d’accessibilité, consultez Modificateurs d’accès.
- Implémentez la méthode d’extension en tant que méthode statique avec au moins la même visibilité que la classe conteneur.
- Le premier paramètre de la méthode spécifie le type sur lequel la méthode opère. Il doit être précédé du modificateur this.
- Dans le code appelant, ajoutez une directive
using
pour spécifier l’espace de noms qui contient la classe de méthode d’extension. - Appelez les méthodes en tant que méthodes d'instance sur le type.
Remarque
Le premier paramètre n'est pas spécifié par le code appelant car il représente le type sur lequel l'opérateur est appliqué, et le compilateur connaît déjà le type de votre objet. Vous devez fournir des arguments uniquement pour les paramètres 2 à n
.
L’exemple suivant implémente une méthode d’extension nommée WordCount
dans la classe CustomExtensions.StringExtension
. La méthode opère sur la classe String, qui est spécifiée comme premier paramètre de méthode. L’espace de noms CustomExtensions
est importé dans l’espace de noms d’application, et la méthode est appelée à l’intérieur de la méthode Main
.
using CustomExtensions;
string s = "The quick brown fox jumped over the lazy dog.";
// Call the method as if it were an
// instance method on the type. Note that the first
// parameter is not specified by the calling code.
int i = s.WordCount();
System.Console.WriteLine("Word count of s is {0}", i);
namespace CustomExtensions
{
// Extension methods must be defined in a static class.
public static class StringExtension
{
// This is the extension method.
// The first parameter takes the "this" modifier
// and specifies the type for which the method is defined.
public static int WordCount(this string str)
{
return str.Split(new char[] {' ', '.','?'}, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
La résolution des surcharges privilégie les méthodes d'instance ou statiques définies par le type lui-même par rapport aux méthodes d'extension. Les méthodes d'extension ne peuvent pas accéder aux données privées de la classe étendue.