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

- [WCF] Configuration pour publication en Release par Blog de Jérémy Jeanson le il y a 15 minutes

- SQL Server Reporting Services : Comment identifier des abonnements utilisateurs pour une migration de serveur de rapport par Blog Technique de Romelard Fabrice le il y a 12 heures et 13 minutes

- Le yOS-Tour est lancé, rendez-vous à Genève le 13 avril ! par Le blog de Patrick [MVP Office 365] le 03-25-2015, 22:58

- [ Microsoft #Azure ] Gestion des comptes, des abonnements et délégation d’administration par Le blog de Patrick [MVP Office 365] le 03-21-2015, 20:46

- Qualité de code & Indentation par Fathi Bellahcene le 03-21-2015, 16:56

- [IIS] Mais d’où sort cette configuration ? par Blog de Jérémy Jeanson le 03-21-2015, 09:27

- Avec Microsoft Office 365, la CILE travaille plus vite. par Le Blog (Vert) d'Arnaud JUND le 03-13-2015, 17:19

- SSD : Volume Impossible @ redimensionner par Blog de Jérémy Jeanson le 03-07-2015, 09:36

- Microsoft Regional Director 2.0 ! par Le blog de Patrick [MVP Office 365] le 02-23-2015, 22:10

- TechDays Paris 2015: Malware unchained par Blog Technique de Romelard Fabrice le 02-12-2015, 22:58