.NET命名空间和使用语句

.NET namespaces and using statements

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

Possible Duplicate:
Should Usings be inside or outside the namespace

两者有什么区别

1
2
3
4
namespace x
{
  using y;
}

1
2
3
4
using y;
namespace x
{
}


第一个名称空间x的作用域是y,第二个名称空间是整个文件的作用域是y,所以可能是其他名称空间。如果每个文件只保留一个名称空间(我想这是惯例),那么通常没有真正的区别[但是如果不同的类型在不同的名称空间中具有相同的名称,请参阅Marc关于冲突的评论]。如果您使用stylecop,它会希望您将using保存在名称空间中。


using语句放在namespace块内,将其作用于该块。这会影响很多事情。

  • 正如@steve haigh所提到的,using语句只在块内有效,因此如果有其他namespace块,它们不会受到影响。
  • 可以基于外部namespace块缩短using指定的命名空间。因此,命名空间外的using x.y;可以表示为namespace x块内的using y;
  • using放在命名空间中会导致编译器保证指定的命名空间不会被覆盖。例如:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        using Guid = System.Guid;
        namespace Sample
        {
            public class Guid {}
            public class Program
            {
                public static void Main()
                {
                    Console.WriteLine(new Guid());
                }
            }
        }

    上面的代码将被编译,但不清楚哪个Guid正在被实例化。但是,如果using语句在namespace块内,则会引发编译器错误。

  • 有关更完整的讨论,请参阅相关的StyleCop文档。