English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Méthode d'extension C#

Comme son nom l'indique, les méthodes d'extension sont des méthodes supplémentaires. Les méthodes d'extension vous permettent d'injecter d'autres méthodes sans modifier, hériter ou recompiler la classe, la structure ou l'interface originale. Vous pouvez ajouter des méthodes d'extension à vos classes personnalisées, aux classes du .NET Framework, aux classes ou interfaces tierces ou aux interfaces.

Définition des méthodes d'extension

Les méthodes d'extension sont en C# 3Nouvelle fonctionnalité ajoutée dans .0, qui peut étendre les fonctionnalités du code source sans modifier le code source original via le mode ADD File.

Les exigences pour les méthodes d'extension sont les suivantes:

  • La méthode d'extension doit être incluse dans une classe marquée static.

  • L'implémentation de l'extension doit être statique.

  • Le premier paramètre de la méthode d'extension est précédé du préfixe this, ce qui signifie que l'objet de la classe à étendre est nécessaire, et à partir du deuxième paramètre, c'est la liste des paramètres de la méthode d'extension.

Dans l'exemple suivant, IsGreaterThan () est une méthode d'extension de type int, qui retourne true si la valeur de la variable int est supérieure à l'entier paramètre fourni.

int i = 10;
bool result = i.IsGreaterThan(100); //Retourne FALSE

La méthode IsGreaterThan () n'est pas une méthode du type de données int (Int32 (struct). C'est une méthode d'extension écrite par le programmeur pour le type de données int. En incluant le nom d'espace qui définit l'extension IsGreaterThan (), la méthode d'extension IsGreaterThan () sera disponible dans tout l'application.

 Les méthodes d'extension ont un symbole spécial dans l'intellisense de Visual Studio, ce qui vous permet de distinguer facilement les méthodes de classe et les méthodes d'extension.

Le symbole des méthodes d'extension dans l'intellisense de Visual Studio

Écrire une méthode d'extension

Maintenant, regardons comment écrire une méthode d'extension.

LINQ est basé sur des méthodes d'extension opérant sur les types IEnumerable et IQueryable.

Les méthodes d'extension sont des méthodes statiques spéciales définies dans une classe statique. Pour définir une méthode d'extension, d'abord, définissez une classe statique.

Par exemple, dans l'exemple suivant, nous avons créé une classe IntExtensions dans l'espace de noms ExtensionMethods. La classe IntExtensions contiendra toutes les méthodes d'extension applicables au type de données int. (Vous pouvez utiliser n'importe quel nom pour l'espace de noms et la classe.)

namespace ExtensionMethods
{
    public static class IntExtensions
    {
    }
}

Maintenant, définissez une méthode statique comme méthode d'extension, où le premier paramètre de la méthode d'extension spécifie le type auquel s'applique l'extension. Nous allons utiliser cette méthode d'extension sur le type int. Par conséquent, il faut ajouterthis Modificateur.

Par exemple, la méthode IsGreaterThan() opère sur int, donc le premier paramètre est this int i.

namespace ExtensionMethods
{
    public static class IntExtensions
     {
        public static bool IsGreaterThan(this int i, int value)
        {
            return i > value;
        }
    }
}

Maintenant, vous pouvez inclure l'espace de noms ExtensionMethods n'importe où vous souhaitez utiliser cette méthode d'extension.

Utilisation de la méthode d'extension

using ExtensionMethods;
class Program
{
    static void Main(string[] args)
    {
        int i = 10;
        bool result = i.IsGreaterThan(100); 
        Console.WriteLine(result);
    }
}
Sortie :
false
La seule différence entre une méthode statique habituelle et une méthode d'extension est que le premier paramètre de la méthode d'extension spécifie le type sur lequel elle va opérer, suivi de this Mots-clés.

Résumé des principes des méthodes d'extension

  1. C# ne supporte que les méthodes d'extension, pas les propriétés d'extension, les événements d'extension, les opérateurs d'extension, etc.

  2. Les méthodes d'extension (les méthodes avant le premier paramètre this) doivent être déclarées dans une classe statique non générique, la méthode d'extension doit avoir un paramètre, et seules le premier paramètre utilise this.

  3. Le compilateur C# nécessite que les classes statiques dans lesquelles les méthodes d'extension sont recherchées aient un domaine de fichier.

  4. Le compilateur C# nécessite l'importation des méthodes d'extension (les méthodes statiques peuvent être nommées librement, le compilateur C# doit passer du temps à chercher, il doit vérifier toutes les classes statiques dans le domaine de fichier et scanner toutes leurs méthodes statiques pour trouver une correspondance)

  5. Plusieurs classes statiques peuvent définir la même méthode d'extension.
    Lorsqu'on étend une type avec une méthode d'extension, on étend également les types dérivés.

Déclaration de méthode d'extension

  • Il faut être dans une classe statique non imbriquée et non générique (par conséquent, il doit s'agir d'une méthode statique)

  • Au moins un paramètre est nécessaire.

  • Le premier paramètre doit être précédé du mot-clé this.

  • Le premier paramètre ne peut pas avoir d'autres modificateurs (comme ref ou out).

  • Le type du premier paramètre ne peut pas être un type de pointeur.

Points à retenir

  • Les méthodes d'extension sont des méthodes personnalisées qui n'étaient pas initialement incluses dans la classe.

  • Les méthodes d'extension peuvent être ajoutées à des classes, structures ou interfaces personnalisées, .NET Framework ou tiers.

  • Le premier paramètre de la méthode d'extension doit être le type applicable à la méthode d'extension, suivi dethisMots-clés.

  • Il est possible d'utiliser les méthodes d'extension à tout endroit de l'application en incluant l'espace de noms contenant le nom de la méthode d'extension.