Comment travailler avec des méthodes d'extension en C #

Le langage de programmation C # prend en charge les méthodes d'extension à partir de C # 3.0. Une méthode d'extension est une méthode qui est utilisée pour étendre la fonctionnalité des types existants en ajoutant des méthodes sans avoir besoin de créer de nouveaux types dérivés. Vous n'avez pas besoin de créer des sous-classes de classes existantes ou de recompiler ou de modifier vos classes existantes pour travailler avec des méthodes d'extension. Les méthodes d'extension améliorent la lisibilité de votre code tout en vous permettant d'étendre les fonctionnalités des types existants.

Les méthodes d'extension courantes dans .Net incluent les opérateurs de requête standard LINQ qui ajoutent des fonctionnalités de requête supplémentaires aux System.Collections.IEnumerable and System.Collections.Generic.IEnumerabletypes. Notez que vous pouvez tirer parti des méthodes d'extension pour étendre une classe ou une interface, mais vous ne pouvez pas remplacer leurs méthodes. Le MSDN déclare: "Les méthodes d'extension vous permettent" d'ajouter "des méthodes à des types existants sans créer un nouveau type dérivé, recompiler ou modifier le type d'origine. Les méthodes d'extension sont un type particulier de méthode statique, mais elles sont appelées comme si elles étaient des méthodes d'instance sur le type étendu. "

Essentiellement, une méthode d'extension est un type spécial de méthode statique et vous permet d'ajouter des fonctionnalités à un type existant même si vous n'avez pas accès au code source du type. Une méthode d'extension est comme une autre méthode statique mais a la référence «this» comme premier paramètre. Vous pouvez ajouter autant de méthodes d'extension que vous le souhaitez à n'importe quel type. Plus important encore, vous pouvez également ajouter des méthodes d'extension même à un type valeur.

Lorsque vous travaillez avec des méthodes d'extension, gardez ces points à l'esprit:

  • Une méthode d'extension doit être une méthode statique
  • Une méthode d'extension doit être à l'intérieur d'une classe statique - la classe peut avoir n'importe quel nom
  • Le paramètre dans une méthode d'extension doit toujours avoir le mot-clé "this" précédant le type sur lequel la méthode doit être appelée

Notez que si vous définissez une méthode d'extension sur un type qui a la même signature que toute autre méthode du type que vous étendez, la méthode d'extension ne sera jamais appelée.

Programmation des méthodes d'extension en C #

Dans cette section, nous allons explorer comment programmer des méthodes d'extension en utilisant C #. La liste de codes suivante illustre à quoi ressemble une méthode d'extension.

public static class StringExtensions

    {

        public static bool IsNumeric(this string str)

        {

            double output;

            return double.TryParse(str, out output);

        }

    }

Notez le premier paramètre de la méthode d'extension. Comme déjà discuté, toute méthode d'extension doit être statique et doit avoir le mot-clé "this" précédant le paramètre sur lequel vous voulez que la méthode soit appelée. Lorsque vous spécifiez le mot clé "this" dans la liste de paramètres comme il a été montré dans l'exemple ci-dessus, vous informez le compilateur qu'une méthode d'extension a été définie pour la classe de chaînes.

Voici comment vous pouvez utiliser la méthode d'extension IsNumeric sur une instance de chaîne.

static void Main(string[] args)

        {

            string str = "100";

            if (str.IsNumeric())

                Console.WriteLine("The string object named str contains numeric value.");

            Console.Read();

        }

Lorsque vous exécutez le programme ci-dessus, le message («L'objet chaîne nommé str contient une valeur numérique.» S'affiche dans la fenêtre de la console.

Vous pouvez utiliser des méthodes d'extension pour injecter de nouvelles fonctionnalités via des méthodes à un type sans avoir besoin de modifier, dériver ou recompiler le type d'origine. Comme je l'ai mentionné précédemment, les méthodes d'extension peuvent également être appliquées aux types valeur. Voyons comment cela peut être réalisé avec un exemple.

La classe suivante nommée IntegerExtensions contient une méthode d'extension nommée IsEven qui renvoie true si l'entier sur lequel elle est appelée est pair, false dans le cas contraire.

public static class IntegerExtensions

    {

        public static bool IsEven(this int i)

        {

            return ((i % 2) == 0);

        }

    }

Et voici comment utiliser la méthode d'extension IsEven sur un entier.

int n = 2;

if(n.IsEven())

 Console.WriteLine("The value of the integer is even.");