.net:namespace:在命名空间之前或之后编写USING指令的确切区别是什么

时间:2010-10-22 06:19:44

标签: .net namespaces

  

可能重复:
  Should Usings be inside or outside the namespace
  .NET namespaces and using statements

在命名空间声明之前或之后编写USING指令的确切区别是什么。

示例:

using System;
using System.Linq;
using NUnit.Framework;

namespace HostTest
{
 /**  code goes here **/
}

namespace HostService
{
  using System.Runtime.Serialization;
  using System;

       /**  code goes here **/
}

3 个答案:

答案 0 :(得分:3)

Darin的答案是正确的但不全面 - 因为它也会影响using指令本身如何执行查找:他们是否尝试匹配另一个名称空间中的名称。

Eric Lippert有great blog post了解更多细节。在我看来,最重要的一点是最后:

  

因此我的建议是:

     
      
  • 每个文件只有一个顶级命名空间
  •   
  • 如果您选择在命名空间中放置using指令,则使用全局别名限定符完全限定它们
  •   

作为必然结果,我建议第二点意味着在命名空间内使用指令比使用命名空间外的指令更难以实现,我会把它们放在外面。它也有助于Visual Studio默认:)

这只是一个编译时问题 - 它只会影响编译器查找名称的方式,而不会影响生成的代码使用这些名称。

术语的最后一点:您的问题涉及using 语句,但所有这些都是using 指令using语句是获取资源并在最后处置它的语句:

using (Stream stream = ...)
{
    // ...
}

我只是在进一步教育的精神中提到这一点 - 很明显你在这个特殊情况下的意思是:)

答案 1 :(得分:2)

如果将use放在命名空间中,则它们仅应用于此命名空间,而不应用于同一文件中的其他命名空间。这允许您执行以下操作:

namespace Bar
{
    public class Foo { }
}

namespace Foo
{
    using Bar;

    public class Test
    {
        public Test()
        {
            var f = new Foo();
        }
    }
}

注意Foo命名空间如何在Foo命名空间内使用,这要归功于里面的using Bar

答案 2 :(得分:0)

完全赞同达林。添加Darin刚提到的内容...我尝试创建两个控制台应用程序并按照您的建议更改使用顺序。我检查了.NET Reflecteor中的EXE,并没有什么区别。它只是你想要使用的方式。