2009-07-20 8 views
5

Si j'ai un espace de noms comme:espaces de noms et Utilisation des directives

namespace MyApp.Providers 
{ 
    using System; 
    using System.Collections.Generic; 
    using System.Configuration; 
    using System.Globalization; 
    } 

Est-ce que cela veut dire que si je crée d'autres fichiers et des classes avec le même espace de noms, les déclarations sont partagés à l'aide, et je ne dois pas les inclure à nouveau?

Si oui, n'est-ce pas un peu un casse-tête de gestion?

+1

Plus de détails ici: http://stackoverflow.com/questions/125319/should-usings-be-inside-or-outside-the-namespace – alexandrul

+1

C'est une directive, pas une déclaration. La déclaration ['using'] (http://msdn.microsoft.com/en-us/library/yh598w02.aspx) est entièrement autre chose. –

Répondre

10

Non, ce n'est bon que pour la section de l'espace de noms à l'intérieur du fichier. Pas pour tous les fichiers à l'intérieur de l'espace de noms.

Si vous placez l'instruction using en dehors de l'espace de noms, elle s'applique à l'intégralité du fichier, quel que soit l'espace de noms.

Il recherchera également les utilisations à l'intérieur de l'espace de noms en premier, avant d'aller à la portée externe.

+0

Bien! Cela a du sens alors. Heureux de savoir ... –

+1

Comment mettre l'instruction using en dehors du fichier? –

+0

Désolé, faute de frappe. Destiné à dire à l'extérieur de l'espace de noms. – Brandon

0

Non, ce n'est pas le cas, et donc non, ce n'est pas le cas. Considérez le fait qu'en dehors de la déclaration namespace, vous vous trouvez dans l'espace de noms global. Les instructions using dans cette région du fichier source affectent-elles l'espace de noms global dans les autres fichiers source?

0

Non. Vous devrez inclure les espaces de noms dans chaque classe sauf sur les classes partielles.

Remarque d'un côté: vous faites une très bonne habitude de placer les instructions using dans l'espace de noms. C'est une très bonne syntaxe.

Continuez votre bon travail.

+2

Pourquoi est-il bon de placer les instructions Using dans la déclaration de l'espace de noms? –

+4

Curieux de savoir pourquoi vous pensez que c'est une très bonne pratique de le faire? Si vous suivez la bonne pratique consistant à placer chaque classe dans un fichier séparé, cela ne fait aucune différence si vous mettez des instructions 'using' en haut du fichier ou en haut d'un bloc' namespace'. –

+0

Earwicker - MERCI BEAUCOUP !!! c'est pourquoi je commençais à être confus en premier lieu! –

0

Les instructions using sont valables pour le fichier de code dans lequel elles apparaissent, avec une légère torsion; Si vous placez les instructions using à l'intérieur de l'espace de noms, elles sont limitées à la portée de cet espace de noms, mais toujours dans le même fichier de code.

2

Vous devez spécifier la directive using pour les classes que vous souhaitez référencer sans qualification dans chaque fichier dans lequel vous souhaitez les utiliser.

Reference:

Le champ d'application d'une directive à l'aide est limitée au du fichier dans lequel il apparaît .

0

Les utilisations s'appliquent uniquement au fichier en cours.Qu'ils soient à l'intérieur ou à l'extérieur de la déclaration d'espace de nom ne fait qu'une petite différence:

L'ordre de recherche pour les types est la suivante:

  1. début dans la déclaration d'espace de nom le plus intérieur
  2. regard dans l'espace de noms en cours
  3. regard dans les usings de l'espace de noms en cours
  4. aller jusqu'à la déclaration d'espace de noms de parent et répéter de l'étape 2

En conséquence, ce programme compilera fin:

namespace MyProject.Main { 
    using System; 

    class Program { 
     public static void Main(string[] args) { 
      Console.WriteLine("Hello, World!"); 
     } 
    } 
} 

// in another file: 
namespace MyProject.Console { 
    class Test {} 
} 

Mais si vous déplacez le using System; vers le haut, puis la compilation échouera (MyProject.Console.WriteLine n'existe pas).

Questions connexes