2010-10-22 10 views
0

Possible en double:
Should Usings be inside or outside the namespace
.NET namespaces and using statements.net: namespace: Quelle est la différence exacte par écrit les directives UTILISATION avant ou après namespace

Quelle est la différence exacte par écrit les directives avant UTILISATION ou après la déclaration de l'espace de noms.

Exemple:

using System; 
using System.Linq; 
using NUnit.Framework; 

namespace HostTest 
{ 
/** code goes here **/ 
} 

et

namespace HostService 
{ 
    using System.Runtime.Serialization; 
    using System; 

     /** code goes here **/ 
} 
+0

http://stackoverflow.com/questions/795098/net-namespaces-and-using-statements –

+0

http://stackoverflow.com/questions/125319/should-usings-be-inside-or-horside-the-namespace –

Répondre

3

La réponse de Darin est correcte mais pas exhaustive - car cela fait aussi une différence dans la manière dont les directives using effectuent elles-mêmes la recherche: qu'elles tentent de faire correspondre les noms dans un autre espace de noms.

Eric Lippert a un great blog post entrant dans plus de détails. À mon avis, le point le plus important est à la fin:

donc mon conseil est maintenant:

  • ont un seul espace de noms de niveau supérieur par fichier
  • si vous choisissez de mettre à l'aide des directives à l'intérieur de vos espaces de noms, puis entièrement les qualifier avec le qualificatif d'alias global

en corollaire, je suggère que le deuxième point signifie que l'utilisation directe Les ives dans les espaces de noms sont plus difficiles à obtenir que d'utiliser des directives en dehors des espaces de noms, j'irais les mettre dehors.

Ceci est juste un problème de compilation - cela n'affecte que la façon dont le compilateur recherche les noms, et non le code généré en utilisant ces noms.

Un point de la terminologie finale: votre question parle de usingdéclarations, mais tous ces éléments sont usingdirectives.La déclaration using est celui qui acquiert une ressource et en dispose à la fin:

using (Stream stream = ...) 
{ 
    // ... 
} 

Je mentionne cela seulement dans l'esprit de la formation continue - il était évident que vous vouliez dire dans ce cas particulier :)

+0

Merci beaucoup Jon, pour la clarification et me corriger :) – Posto

2

Si vous mettez l'intérieur en utilisant l'espace de noms qu'ils appliquent uniquement à cet espace de noms et non à d'autres espaces de noms dans le même fichier. Cela vous permet d'effectuer les opérations suivantes:

namespace Bar 
{ 
    public class Foo { } 
} 

namespace Foo 
{ 
    using Bar; 

    public class Test 
    { 
     public Test() 
     { 
      var f = new Foo(); 
     } 
    } 
} 

Remarquez comment la classe Foo est utilisé dans l'espace de noms Foo grâce à l'using Bar intérieur.

0

Totalement d'accord avec Darin. Pour ajouter à ce que Darin vient de mentionner ... J'ai essayé de créer deux applications console et j'ai changé l'ordre des utilisations comme vous l'avez suggéré. J'ai vérifié les EXE dans .NET Reflecteor et il n'y avait absolument aucune différence. C'est à peu près la façon dont vous aimeriez utiliser les utilisations.