Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Méthodes d’extensions: attention aux surprises 2/2

je reviens sur mon billet précédent en modifiant légèrement mon API:

using System;

namespace System.Data
{
    private static class Extentions
    {
        public static void DoSomething(this IDbConnection cnx)
        {
            //plein de truc à faire
        }
    }
}

J’ai modifié mon programme pour tenir compte du type renvoyé et voici ce qu’Intellisense me propose:

 

image

Mon extension n’est toujours pas là! C’est encore la même raison: l’espace de nom de l’extension n’est pas utilisé dans mon programme même si l’espace de nom de la classe SqlCommand est bien présent. Il faut donc modifier le code en ajoutant “using System.Data”:

 image

Un conseil donc: lorsque vous déclarez des méthodes d’extensions sur des interfaces ou non, bien préciser dans la documentation qu’il faut ajouter l''espace de nom correspondant!

Publié mercredi 30 septembre 2009 09:00 par Miiitch
Classé sous :
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

# re: Méthodes d’extensions: attention aux surprises 2/2

Je ne vois pas de quelle surprise tu parles... Une méthode d'extension est une méthode statique, déclarée dans une classe statique.

Si tu veux utiliser cette méthode, la classe qui l'héberge (ici, "Extensions") doit être visible comme n'importe quelle autre classe. Si elle est définie dans un namespace autre que celui à partir duquel tu veux y faire référence, alors tu dois spécifier au compilateur que tu veux utiliser ce namespace.

Quand tu utilises File.Create(), tu dois faire un using du namespace de la classe File : System.IO.

Quand tu utilises Extensions.DoSomething(), tu dois faire un using du namespace de la classe Extensions : System.Data

mercredi 30 septembre 2009 10:08 by romain verdier

# re: Méthodes d’extensions: attention aux surprises 2/2

Sur le principe je suis d'accord: lorsque l'on parle de la classe "File" on trouve facilement qu'elle vient de System.IO, mais ce n'est pas aussi évident lorsque l'on doit trouver quel using mettre pour un nom de méthode ce qui est le cas avec une méthode d'extension puisque la classe de la méthode est rarement utilisée.

Ce genre de chose ne surprend pas forcement quand on a l'expérience mais peut vite surprendre ceux qui découvrent les méthodes d'extensions: les gens s'attendent à avoir l'extension de disponible dès qu'ils utilisent la classe.

mercredi 30 septembre 2009 12:56 by Miiitch
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Créer un périphérique Windows To Go 10 ! par Blog de Jérémy Jeanson le 11-21-2014, 04:54

- RDV à Genève le 12 décembre pour l’évènement “SharePoint–Office 365 : des pratiques pour une meilleure productivité !” par Le blog de Patrick [MVP Office 365] le 11-19-2014, 10:40

- [IIS] Erreurs web personnalisées par Blog de Jérémy Jeanson le 11-19-2014, 00:00

- BDD/TDD + Javascript par Fathi Bellahcene le 11-16-2014, 16:57

- Sécuriser sans stocker de mots de passe par Blog de Jérémy Jeanson le 11-15-2014, 08:58

- Où télécharger la preview de Visual Studio 2015 ? par Blog de Jérémy Jeanson le 11-13-2014, 21:33

- Les cartes sont partout ! par Le blog de Patrick [MVP Office 365] le 11-13-2014, 17:26

- [ #Office365 ] Courrier basse priorité ! par Le blog de Patrick [MVP Office 365] le 11-12-2014, 08:56

- [Oracle] Fichier oranfsodm12.dll absent du package client par Blog de Jérémy Jeanson le 11-10-2014, 20:44

- [ #Office365 ] Le chapitre 1 des Groupes est écrit, et alors ? par Le blog de Patrick [MVP Office 365] le 11-10-2014, 20:23