C# LanguageMéthodes d'extension


Syntaxe

  • public static ReturnType MyExtensionMethod (cette cible TargetType)
  • public static ReturnType MyExtensionMethod (cette cible TargetType, TArg1 arg1, ...)

Paramètres

Paramètre Détails
ce Le premier paramètre d'une méthode d'extension doit toujours être précédé du mot this clé this , suivi de l'identifiant avec lequel se référer à l'instance "actuelle" de l'objet que vous étendez.

Remarques

Les méthodes d'extension sont le sucre syntaxique qui permet d'appeler des méthodes statiques sur des instances d'objet comme si elles étaient membres du type lui-même.

Les méthodes d'extension nécessitent un objet cible explicite. Vous devrez utiliser le mot this clé this pour accéder à la méthode depuis le type étendu lui-même.

Les méthodes d'extensions doivent être déclarées statiques et doivent vivre dans une classe statique.

Quel espace de noms?

Le choix de l'espace de noms pour votre classe de méthode d'extension est un compromis entre visibilité et découverte.

L' option la plus souvent mentionnée est d'avoir un espace de noms personnalisé pour vos méthodes d'extension. Cependant, cela impliquera un effort de communication afin que les utilisateurs de votre code sachent que les méthodes d'extension existent et où les trouver.

Une alternative consiste à choisir un espace de noms tel que les développeurs découvriront vos méthodes d’extension via Intellisense. Donc, si vous voulez étendre la classe Foo , il est logique de placer les méthodes d’extension dans le même espace de noms que Foo .

Il est important de comprendre que rien ne vous empêche d'utiliser l'espace de noms "quelqu'un d'autre" : ainsi, si vous souhaitez étendre IEnumerable , vous pouvez ajouter votre méthode d'extension dans l'espace de noms System.Linq .

Ce n'est pas toujours une bonne idée. Par exemple, dans un cas spécifique, vous souhaiterez peut-être étendre un type commun ( bool IsApproxEqualTo(this double value, double other) par exemple), mais ne pas polluer l'ensemble du System . Dans ce cas, il est préférable de choisir un espace de noms local spécifique.

Enfin, il est également possible de mettre les méthodes d’extension dans aucun espace de nommage !

Une bonne question de référence: comment gérez-vous les espaces de noms de vos méthodes d’extension?

Applicabilité

Des précautions doivent être prises lors de la création de méthodes d’extension pour s’assurer qu’elles conviennent à tous les intrants possibles et ne concernent pas uniquement des situations spécifiques. Par exemple, il est possible d'étendre des classes système telles que string , ce qui rend votre nouveau code disponible pour n'importe quelle chaîne. Si votre code doit exécuter une logique spécifique à un domaine sur un format de chaîne spécifique à un domaine, une méthode d'extension ne conviendrait pas car sa présence pourrait induire les appelants à travailler avec d'autres chaînes du système.

La liste suivante contient les caractéristiques de base et les propriétés des méthodes d'extension

  1. Ce doit être une méthode statique.
  2. Il doit être situé dans une classe statique.
  3. Il utilise le mot-clé "this" comme premier paramètre avec un type dans .NET et cette méthode sera appelée par une instance de type donnée du côté client.
  4. Il a également montré par VS intellisense. Quand on appuie sur le point . après une instance de type, il est dans VS intellisense.
  5. Une méthode d'extension doit se trouver dans le même espace de noms que celui utilisé ou vous devez importer l'espace de noms de la classe par une instruction using.
  6. Vous pouvez donner n'importe quel nom à la classe qui a une méthode d'extension, mais la classe doit être statique.
  7. Si vous souhaitez ajouter de nouvelles méthodes à un type et que vous ne disposez pas du code source correspondant, la solution consiste à utiliser et à implémenter des méthodes d'extension de ce type.
  8. Si vous créez des méthodes d'extension ayant les mêmes méthodes de signature que le type que vous étendez, les méthodes d'extension ne seront jamais appelées.

Méthodes d'extension Exemples Liés