14 Stimmen

.NET Namespaces und using-Anweisungen

Mögliches Duplikat:
Sollte Usings innerhalb oder außerhalb des Namensraums liegen

Was ist der Unterschied zwischen

namespace x
{
  using y;
}

y

using y;
namespace x
{
}

?

15voto

Steve Punkte 8371

Die erste hat y im Bereich für nur den Namensraum x, die zweite hat y im Bereich für die gesamte Datei, also möglicherweise andere Namensräume. Wenn Sie sich auf einen Namensraum pro Datei beschränken (ich nehme an, dass das die Konvention war), dann gibt es in der Regel kein wirklicher Unterschied [aber siehe Marcs Kommentar zu Konflikten, wenn verschiedene Typen den gleichen Namen in verschiedenen Namensräumen haben]. Wenn Sie StyleCop verwenden, wird es wollen, dass Sie die Verwendungen innerhalb des Namespaces behalten.

7voto

bdukes Punkte 144019

Die Umsetzung der using Anweisung innerhalb der namespace Block auf diesen Block beschränkt. Dies hat Auswirkungen auf eine Reihe von Dingen.

  1. Als @Steve Haigh erwähnt, die using Anweisung ist nur innerhalb des Blocks gültig, d.h. wenn es andere namespace Blöcke, wären sie nicht betroffen.
  2. Der Namespace, der durch die Option using kann auf der Grundlage der äußeren Hülle gekürzt werden namespace blockieren. Also using x.y; außerhalb des Namespace kann einfach ausgedrückt werden als using y; innerhalb des namespace x Block.
  3. Die Umsetzung der using innerhalb des Namespaces bewirkt, dass der Compiler garantiert, dass der angegebene Namespace nicht überschrieben wird. Zum Beispiel:

        using Guid = System.Guid;
        namespace Sample
        {
            public class Guid {}
            public class Program
            {
                public static void Main()
                {
                    Console.WriteLine(new Guid());
                }
            }
        }

    Der obige Code wird kompiliert, aber es ist unklar, welche Guid instanziiert wird. Wenn die using Anweisung befindet sich innerhalb der namespace Blocks wird jedoch ein Compilerfehler ausgelöst.

Siehe die zugehörige StyleCop-Dokumentation für eine ausführlichere Diskussion.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X