c#使用语句放置

c# using statements placement

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Should Usings be inside or outside the namespace

我正在研究一个代码库,在这个代码库中,作者(我尊重的人)一致地将using语句放在命名空间内部,而不是放在它上面。是否有一些优势(更有效的GC?)这样做,还是这只是一个代码样式的首选项?

干杯,贝里尔


不要在不使用"global::"的情况下将它们放入系统,否则您的代码将变得脆弱。

1
2
3
4
namspace bar {
   using foo //this may mean"using global::bar.foo OR using global::foo"

}

参考文献

http://blogs.msdn.com/b/ericlippet/archive/2007/06/25/inside-or-outside.aspx?WA= WSENIN 1.0


斯科特·汉塞尔曼在2008年7月发表了一篇关于这个的文章。我不知道这是否随.NET 4框架而改变,但它基本上是一个首选项问题,除非您将类命名为与现有类相同的名称,以及在一个文件中命名多个命名空间。


如果在同一个文件中有多个名称空间,那么您将只使用包含的名称空间而不是整个文件中的所有名称空间。

另请参见(刚刚找到了这个很好的解释)"using"语句应该在命名空间内部还是外部?


这是MS推荐练习。像StyleCop这样的程序推荐它。

签出SA1200是否所有的using指令都必须放在纯外观的名称空间(stylecop)中?更深入的讨论


这是一种偏好,但在某些情况下,当您在内部使用语句与在外部使用语句时,会有语义差异。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using Bar;

namespace Foo
{
    using Bar;

    namespace Bar
    {
        class C
        {
        }

    }

    namespace Baz
    {
        class D
        {
            C c = new C();
        }
    }
}

namespace Bar
{
    class E
    {
    }
}

在这里,outer using语句引用命名空间foo后面的命名空间栏。inner using语句引用foo内的条。如果foo内没有酒吧,那么内部也指外部酒吧。

正如Jonathan指出的那样,可以将内部使用改为"using global::bar";以引用out bar名称空间,因为d试图使用c,这会破坏此特定代码。