IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Où placer les using ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut Où placer les using ?
    Bonjour,

    J'ai tout récemment testé StyleCop avec #Develop (puisqu' inutilisable avec la version express de C#).

    J'ai été étonné qu'il me demande de placer toutes les instructions using à l'intérieur du namespace, contrairement à ce qui est fait par défaut par Visual C# qui place les using en en-tète du fichier de code.

    Alors, qui a raison ? Qu'est-ce qui est le mieux ?
    Et vous, vous faites comment ?

    Papy !

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 217
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    [...]
    Alors, qui a raison ? Qu'est-ce qui est le mieux ?
    Et vous, vous faites comment ?
    [...]
    "Qui a raison ?" je dirais à la fois... "personne" et "les deux ont raison"...

    Plus sérieusement, comme son nom l'indique StyleCop est un outil d'assistance pour "styler" (en fonction de vos preferences dans ses settings) automatiquement vos sources C#... comme tout outil, Visual Studio y compris, il vient avec ses préférences par défaut, que j'appellerai "hors contexte", puisqu'à priori (... ! ) ... il ne vous connait pas, vous, en tant qu'humain, avec vos problematiques, le type de code que vous écrivez, etc.

    Or, effectivement, dans la spec de C#, partie syntaxe, le langage nous permet (entre nombreuses autres subtilités liées aux namespaces, aux "using", aux "aliases", etc :

    ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    using Editor1.Lib1.Component1;
    using Editor1.Lib1.Component2;
    using Editor2.Lib1.Component1;
     
    namespace Vous.VotreLib
    {
      // vos definitions...
    }
    ou cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    namespace Vous.VotreLib
    {
      using Editor1.Lib1.Component1;
      using Editor1.Lib1.Component2;
      using Editor2.Lib1.Component1;
     
      // vos definitions...
    }
    ou encore ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    using Editor1.Lib1.Component1;
     
    namespace Vous.VotreLib
    {
      using Editor1.Lib1.Component2;
      using Editor2.Lib1.Component1;
     
      // vos definitions...
    }
    etc, etc

    Cela est donc plus qu'une problematique de style a vrai dire, c'est aussi lié à la maniere dont vous ecrivez votre code pour résoudre, pour le compilateur, les situations d'ambiguité éventuelles que les règles de portée des namespaces soulèvent.

    En clair : prenez simplement le temps (5 ou 10 mins) de relire ce que dis la spec C# sur celles-ci et vous trouverez par vous meme quel est "le bon style" C# a configurer pour les namespaces que vous utilisez dans votre code, qu'ils soient fournisseurs de fonctionnalités ou les votres propres.

    'HTH

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Janvier 2008
    Messages : 106
    Par défaut
    Selon moi, tu vas trouver beaucoup plus de Using en haut complètement du ton code car (je parles pour moi ) la plus par des codeurs utilisent VS2003/2005/2008 ou même Express.

    Mais c'est selon ton EDI, et selon tes gouts je crois!

    Friedrick

  4. #4
    Membre chevronné
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Par défaut
    On a eu cette problématique également dans ma boîte, et on n'a pas encore tranché là dessus, mais il y a des chances pour qu'on écarte cette règle, tant elle nous paraît.... peu appropriée.

  5. #5
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Le fait de mettre les using dans le namespace permet d'éviter des conflits, c'est probablement une des raisons de cette règle StyleCop.

    Avec les 2 codes suivants, l'erreur n'est pas la même suivant comment on place les using.

    Premier cas avec using hors du namespace : la classe SysIO masque l'alias SysIO. Le compilateur indique une erreur, mais pas celle qui nous intéresse. Le conflit passe inaperçu à priori.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    using SysIO = System.IO;
     
    namespace ConsoleApp
    {
        public class SysIO
        {
            public void MyMethod() { }
        }
     
        public class Test
        {
            public static void Main()
            {
                SysIO.Stream s;
            }
        }
    }
    Deuxième cas avec using dans le namespace. Le compilateur indique le conflit entre l'alias et la classe existante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    namespace ConsoleApp
    {
        using SysIO = System.IO;
     
        public class SysIO
        {
            public void MyMethod() { }
        }
     
        public class Test
        {
            public static void Main()
            {
                SysIO.Stream s;
            }
        }
    }
    VS2008 est arrivé avant StyleCop je pense, ce qui explique que les templates n'ont pas changés pour s'adapter à cette règle. Probablement qu'ils seront adaptés sur la prochaine version de VS, ce serait logique en tout cas.

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 527
    Par défaut
    Il y a donc bien une question de portée.

    Je n'utilise jamais les alias, n'ayant pas encore eu besoin de le faire. Est-ce une pratique courante dans la programmation C# ?

    Puisqu'on parle de namespaces, j'ai remarqué que VS C#, lorsqu'on crée un projet portant un nom composé, le namespace par défaut est composé des mots composant le nom du projet, séparés par des underscores. Ce que FxCop indique comme une erreur. Là aussi, il faudrait que que les "violons" soient accordés. .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [TP] Problème avec les uses
    Par Sid ali dans le forum Turbo Pascal
    Réponses: 14
    Dernier message: 27/02/2006, 19h12
  2. [TP] Problème avec les uses en pascal
    Par ryma501 dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 15/02/2006, 22h09
  3. Réponses: 3
    Dernier message: 18/02/2005, 10h05
  4. [TogetherDesignerCE] Construire les Use case UML2
    Par jacma dans le forum Autres
    Réponses: 3
    Dernier message: 10/09/2004, 21h30
  5. [TOMCAT][XML] Ou placer les fichiers XML ?
    Par kitov dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 01/06/2004, 14h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo