2009-07-20 8 views
5

Wenn ich einen Namensraum wie:Namensräume und Verwenden von Richtlinien

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

Bedeutet dies, dass, wenn ich andere Dateien und Klassen mit dem gleichen Namensraum erstellen, werden die Verwendung von Aussagen geteilt, und ich brauche nicht zu sie wieder aufnehmen?

Wenn ja, ist das nicht ein bisschen Kopfschmerzen Kopfschmerzen?

+1

Weitere Details hier: http://stackoverflow.com/questions/125319/should-usings-be-inside-or-outside-the-namespace – alexandrul

+1

Es ist eine Direktive, keine Aussage. Die [using' Statement] (http://msdn.microsoft.com/en-us/library/yh598w02.aspx) ist etwas ganz anderes. –

Antwort

10

Nein, es ist nur gut für den Namespace-Abschnitt innerhalb der Datei. Nicht für alle Dateien im Namespace.

Wenn Sie die using-Anweisung außerhalb des Namespace platzieren, gilt sie für die gesamte Datei unabhängig vom Namespace.

Es wird auch die Usings innerhalb des Namespace sucht zuerst, bevor sie an den äußeren Umfang gehen.

+0

Gut! Dies macht dann Sinn. Gut zu wissen ... –

+1

Wie setzt man die using-Anweisung außerhalb der Datei? –

+0

Sorry, Tippfehler. Bedeutet, außerhalb des Namensraums zu sagen. – Brandon

0

Nein, tut es nicht, und so nicht, ist es nicht.

Betrachten Sie die Tatsache, dass Sie sich außerhalb der namespace Deklaration im globalen Namespace befinden. Haben using Anweisungen in dieser Region der Quelldatei Auswirkungen auf den globalen Namespace in anderen Quelldateien?

0

Nein. Sie müssen die Namespaces in jede Klasse aufnehmen, mit Ausnahme von Teilklassen.

Eine Randnotiz: Sie machen eine sehr gute Übung, die using-Anweisungen in den Namespace zu schreiben. Das ist eine sehr gute Syntax.

Weiter so.

+2

Warum ist es gut, die Using-Anweisungen in die Namespace-Deklaration einzufügen? –

+4

Neugierig, warum Sie das * sehr * empfehlen, dies zu tun? Wenn Sie der guten Praxis folgen, jede Klasse in eine separate Datei zu schreiben, macht es wenig Unterschied, ob Sie 'using'-Anweisungen an den Anfang der Datei oder an den Anfang eines' Namespace'-Blocks setzen. –

+0

Earwicker - DANKE SEHR VIEL !!! Deshalb wurde ich zuerst verwirrt! –

0

Die using-Anweisungen sind für die Code-Datei gültig, in dem sie erscheinen, mit einer geringfügigen Torsion; Wenn Sie die using-Anweisungen in den Namespace einfügen, sind sie auf den Bereich dieses Namespaces beschränkt, aber immer noch nur innerhalb derselben Codedatei.

2

Sie müssen die Anweisung using für alle Klassen angeben, die ohne Qualifikation in jeder Datei verweisen möchten, wo Sie wollen, sie benutzen.

Reference:

Der Geltungsbereich einer using-Direktive ist beschränkt sich auf die Datei, in der es erscheint.

0

Usings nur für die aktuelle Datei.Ob sie innerhalb oder außerhalb der Namespace-Deklaration sind macht nur einen kleinen Unterschied:

Die Suchreihenfolge für Typen ist wie folgt:

  1. Start im innersten Namespace-Deklaration
  2. Blick in den aktuellen Namensraum
  3. Blick in den usings des aktuellen Namensraum
  4. der Mutternamespace-Deklaration gehen und wiederholen den Vorgang ab Schritt 2

Als Ergebnis wird dieses Programm kompiliert fein:

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

Aber wenn man die using System; nach oben bewegen, dann wird die Kompilierung fehlschlagen (MyProject.Console.WriteLine nicht existiert).

Verwandte Themen