2009-07-20 3 views
5

Se ho uno spazio dei nomi come:Namespace e l'uso di direttive

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

Questo significa che se creo altri file e classi con lo stesso spazio dei nomi, le istruzioni using sono condivisi, e non ho bisogno di includerli di nuovo?

Se sì, non è un po 'un mal di testa?

+1

Ulteriori dettagli qui: http://stackoverflow.com/questions/125319/should-usings-be-inside-or-out-the-namespace – alexandrul

+1

È una direttiva, non una dichiarazione. L'istruzione ['using'] (http://msdn.microsoft.com/en-us/library/yh598w02.aspx) è completamente diversa. –

risposta

10

No, va bene solo per la sezione spazio dei nomi all'interno del file. Non per tutti i file all'interno del namespace.

Se si inserisce l'istruzione using al di fuori dello spazio dei nomi, si applica all'intero file indipendentemente dallo spazio dei nomi.

Cerca anche gli Usi all'interno dello spazio dei nomi prima di passare allo scope esterno.

+0

Buono! Questo ha senso allora. Felice di sapere ... –

+1

Come si inserisce l'istruzione using al di fuori del file? –

+0

Spiacenti, errore di battitura. Vuol dire dire al di fuori del namespace. – Brandon

0

No, non è così, e così no, non lo è.

Considerare il fatto che al di fuori della dichiarazione namespace ci si trova nello spazio dei nomi globale. Le istruzioni using in quella regione del file di origine influenzano lo spazio dei nomi globale in altri file di origine?

0

No. È necessario includere gli spazi dei nomi in ogni classe, ad eccezione delle classi parziali.

Una nota a margine: si sta facendo un'ottima pratica di inserire le istruzioni using all'interno del namespace. Questa è un'ottima sintassi.

Continuate così.

+2

Perché è bene inserire le istruzioni Using nella dichiarazione dello spazio dei nomi? –

+4

Sei curioso di sapere perché pensi * molto * buone pratiche per farlo? Se si segue la buona pratica di mettere ogni classe in un file separato, fa poca differenza se si mettono le istruzioni 'using' all'inizio del file o all'inizio di un blocco' namespace'. –

+0

Earwicker - GRAZIE MOLTO !!! questo è il motivo per cui mi stavo confondendo in primo luogo! –

0

Le istruzioni using sono valide per il file di codice in cui appaiono, con una leggera svolta; se si inseriscono le istruzioni using all'interno dello spazio dei nomi, esse sono limitate all'ambito di tale spazio dei nomi, ma sempre all'interno dello stesso file di codice.

2

È necessario specificare la direttiva using per tutte le classi a cui si desidera fare riferimento senza qualifica in ciascun file in cui si desidera utilizzarle.

Reference:

L'ambito di una direttiva using è limitato al file in cui essa appare .

0

Gli utilizzi si applicano solo al file corrente.Se sono dentro o fuori la dichiarazione dello spazio dei nomi fa solo una piccola differenza:

L'ordine di ricerca per i tipi è la seguente:

  1. inizio nella dichiarazione dello spazio dei nomi più interno
  2. sguardo nello spazio dei nomi corrente
  3. sguardo negli usings dello spazio dei nomi corrente
  4. andare fino alla dichiarazione del namespace genitore e ripetere dal punto 2
0.123.

Di conseguenza, questo programma verrà compilato bene:

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 {} 
} 

Ma se si sposta il using System; verso l'alto, poi la compilazione fallirà (MyProject.Console.WriteLine non esiste).