.NET, Architecture, ALM, Cloud

Publicité

Les méthodes d'extensions en C# 3.0

Nous avons vu dans un précédent post la mise en place d'une classe générique pour parser vos chaînes de caractères en énumération pour éviter la ligne de code suivante qui était assez fastidieuse :

MyEnum myEnum1 = (MyEnum) Enum.Parse(typeof(MyEnum), "Enum1", true
);

Voyons à présent une nouvelle fonctionnalité proposée par le langage C# 3.0 qui est la méthode d'extension. Une méthode d'extension va vous permettre d'étendre les méthodes de base qui sont présentes sur vos types pour ajouter vos propres méthodes.

Nous allons dans notre exemple ajouter une nouvelle méthode "EnumParse<T>" sur le type string pour permettre de convertir directement votre string en une énumération de type T. Pour créer une méthode d'extension, il vous faut créer une méthode statique en utilisant le mot clef "this" suivi du type sur lequel vous voulez ajouter votre méthode d'extension dans le premier paramètre.

Voici donc la méthode d'extension pour convertir votre chaîne en énumération  :

public static class StringExtension
{
    public static T EnumParse<T>(this string
value)
            where T :
struct
    {
        return (T) EnumParse<T>(value, false
);
    }
  

    public static T EnumParse<T>(this string value, bool ignoreCase)
             where T :
struct
    {
        return (T)Enum.Parse(typeof
(T), value, ignoreCase);
    }
}

Et pour l'utiliser, il vous suffira simplement de faire appel à la méthode "EnumParse<T>" à partir de vos types "string" :

string value = "Enum1";
MyEnum myEnum = value.EnumParse<MyEnum
>();

Le compilateur C# pour transformer votre méthode en méthode d'extension se contentera de positionner l'attribut "System.Runtime.CompilerServices.Extension" au-dessus de chaque méthode où le mot clef "this" se trouve.

Restez tout de même vigilant dans l'utilisation de vos méthodes d'extensions. Une des plus grosses problématiques dans les méthodes d'extensions réside dans le fait de réaliser une méthode "EnumParse<T>" et plus tard de se retrouver avec le framework 4.0 avec la même méthode. Du coup ca sera la méthode du framework qui sera appelé et non votre méthode d'extension. Pour éviter cela, n'hésitez pas à préfixer vos méthodes d'extensions.

Nous verrons dans des prochains post l'utilisation des méthodes d'extensions au sein de Linq ainsi que la possibilité de surcharger vos méthodes d'extensions.

Publicité
Retour à l'accueil
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article