Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
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.
À compter de C# 14, il existe deux syntaxes que vous pouvez utiliser pour définir des méthodes d’extension. C# 14 ajoute des blocs d’extension , où vous définissez des membres d’extension pour un type. Avant C# 14, vous ajoutez ce modificateur au premier paramètre d’une méthode statique pour indiquer que la méthode apparaît en tant que membre d’une instance du type de paramètre.
Blocs d’extension (C# 14 et versions ultérieures)
À compter de C# 14, vous pouvez déclarer des méthodes d’extension à l’aide de blocs d’extension. Un bloc d’extension est un bloc dans une classe statique non imbriquée, non générique, qui contient des membres d’extension pour un type ou une instance de ce type.
Pour définir et appeler une méthode d’extension à l’aide de blocs 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.
- Utilisez un bloc extension pour déclarer des membres d'extension pour un type.
- Dans le code appelant, ajoutez une directive
usingpour 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.
L’exemple suivant implémente une méthode d’extension nommée WordCount à l’aide de la syntaxe de bloc d’extension C# 14. La méthode fonctionne sur la String classe. L’espace CustomExtensions de noms est importé dans l’espace de noms de l’application et la méthode est appelée comme s’il s’agissait d’une méthode d’instance sur la chaîne.
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 {i}");
namespace CustomExtensions
{
// Extension methods must be defined in a static class.
public static class StringExtension
{
extension(string str)
{
// This is the extension member.
// The `str` parameter is declared on the extension declaration.
public int WordCount()
{
return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
}
Méthodes d’extension (versions antérieures)
Avant C# 14, vous déclarez une méthode d’extension en ajoutant ce modificateur au premier paramètre d’une méthode statique.
Pour définir et appeler une méthode d’extension à l’aide de la syntaxe classique :
- 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
usingpour 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.
L’exemple suivant implémente une méthode d’extension nommée WordCount à l’aide de la syntaxe classique. La méthode fonctionne sur la String classe, qui est spécifiée comme premier paramètre de méthode avec le this modificateur. L’espace CustomExtensions de noms est importé dans l’espace de noms de l’application, et la méthode est appelée comme s’il s’agissait d’une méthode d’instance de la classe String.
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 {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 to be extended.
public static int WordCount(this string str)
{
return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
Remarque
Le premier paramètre n’est pas spécifié en appelant le code, car il représente le type sur lequel la méthode est appliquée, et le compilateur connaît déjà le type de votre objet. Vous devez fournir des arguments uniquement pour les paramètres 2 à n.
Informations générales
La résolution de surcharge préfère les méthodes d’instance ou statiques définies par le type lui-même aux méthodes d’extension. Les méthodes d'extension ne peuvent pas accéder aux données privées de la classe étendue.