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

- Compte rendu : SharePoint / O365 : des pratiques pour une meilleure productivité par The Mit's Blog le 12-12-2014, 18:11

- [TFS] Suppression des feature SQL Entreprise en masse par Blog de Jérémy Jeanson le 12-06-2014, 09:18

- [Clean Code] règles de nommage par Fathi Bellahcene le 12-04-2014, 22:59

- Windows To Go 10 et Upgrades impossibles par Blog de Jérémy Jeanson le 12-04-2014, 21:38

- SharePoint OnPremise: Statistiques d’utilisation pour traquer les sites fantomes par Blog Technique de Romelard Fabrice le 12-03-2014, 10:28

- SharePoint 2007: Script PowerShell permettant le backup de toutes les collections de sites d’une application Web par Blog Technique de Romelard Fabrice le 12-02-2014, 10:00

- Xamarin : un choix précieux par .net is good... C# is better ;) le 12-01-2014, 15:10

- Office 365: Comparaison des composants pour préparer votre migration de SharePoint 2007 vers Office 365 par Blog Technique de Romelard Fabrice le 11-28-2014, 16:20

- 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