TOC

This article is currently in the process of being translated into French (~99% done).

C# 3.0:

Extension Methods

Une autre fonctionnalité intéressante de C# 3.0 est le principe de méthodes d'extension. Elle vous permet d'étendre un type existant avec de nouvelles fonctionnalités, sans avoir à créer une sous-classe ou recompiler l'ancien type. Par exemple, vous pourriez vouloir savoir si une certaine chaîne est un nombre ou non. L'approche habituelle serait de définir une fonction, puis de l'appeler à chaque fois, et une fois que vous auriez créé un grand nombre de fonctions de ce type, vous les regrouperiez dans une classe utilitaire, comme celle-ci :

public class MyUtils
{
    public static bool IsNumeric(string s)
    {
        float output;
        return float.TryParse(s, out output);
    }
}

Vous pouvez maintenant vérifier si une chaîne est un nombre en exécutant une ligne de code telle que celle-ci :

string test = "4";
if (MyUtils.IsNumeric(test))
    Console.WriteLine("Yes");
else
    Console.WriteLine("No");

Cependant, avec les méthodes d'extension, vous pouvez en fait étendre la classe String directement pour faire ceci. Pour ce faire, vous définissez une classe statique, avec un ensemble de méthodes statiques qui seront votre bibliothèque de méthodes d'extension. Voici un exemple :

public static class MyExtensionMethods
{
    public static bool IsNumeric(this string s)
    {
        float output;
        return float.TryParse(s, out output);
    }
}

La seule chose qui différencie cette méthode de toute autre méthode statique est le mot-clé "this" dans les paramètres de la méthode. Il indique au compilateur qu'il s'agit d'une méthode d'extension pour la classe "string", et c'est en fait tout ce dont vous avez besoin pour créer une méthode d'extension. Maintenant, vous pouvez appeler la méthode IsNumeric() directement sur les chaînes, comme ceci :

string test = "4";
if (test.IsNumeric())
    Console.WriteLine("Yes");
else
    Console.WriteLine("No");

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!