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

- SharePoint 2013: Préparation de la migration - Création des site Templates dans 2010 et 2013 par Blog Technique de Romelard Fabrice le 08-20-2014, 16:31

- [ #Yammer ] How to change interface language ? Comment changer la langue de l’interface ? par Le blog de Patrick [MVP SharePoint] le 08-20-2014, 14:21

- Onedrive Sync Engine Host : CPU à 100% par Le petit blog de Pierre / Pierre's little blog le 08-06-2014, 22:22

- SharePoint : Bug sur la gestion des permissions et la synchronisation Office par Blog Technique de Romelard Fabrice le 07-10-2014, 11:35

- SharePoint 2007 : La gestion des permissions pour les Workflows par Blog Technique de Romelard Fabrice le 07-08-2014, 11:27

- TypeMock: mock everything! par Fathi Bellahcene le 07-07-2014, 17:06

- Coding is like Read par Aurélien GALTIER le 07-01-2014, 15:30

- Mes vidéos autour des nouveautés VS 2013 par Fathi Bellahcene le 06-30-2014, 20:52

- Recherche un passionné .NET par Tkfé le 06-16-2014, 12:22

- [CodePlex] Projet KISS Workflow Foundation lancé par Blog de Jérémy Jeanson le 06-08-2014, 22:25