.NET命名空间和使用语句

时间:2009-04-27 20:14:45

标签: .net namespaces

  

可能重复:
  Should Usings be inside or outside the namespace

之间有什么区别
namespace x
{
  using y;
}

using y;
namespace x
{
}

2 个答案:

答案 0 :(得分:15)

第一个只有命名空间x的范围是y,第二个在整个文件的范围内有y,所以潜在的其他命名空间。如果你保持每个文件一个命名空间(我猜这是惯例)那么通常没有真正的区别[但是如果不同的类型在不同的命名空间中具有相同的名称,请参阅Marc关于冲突的评论]。如果您使用StyleCop,它将要求您将命令保留在命名空间内。

答案 1 :(得分:7)

using语句放在namespace块中,将其范围限定在该块中。这会影响很多事情。

     
  1. 提到@Steve Haigh时,using语句仅在块中有效,因此如果有其他namespace块,则不会受到影响。
  2.  
  3. using指定的命名空间可以根据外部namespace块缩短。因此,名称空间之外的using x.y;只能在using y;块内表示为namespace x
  4.  
  5. using置于命名空间内会导致编译器保证不会覆盖指定的命名空间。例如:
        using Guid = System.Guid;
        namespace Sample
        {
            public class Guid {}
            public class Program
            {
                public static void Main()
                {
                    Console.WriteLine(new Guid());
                }
            }
        }
    上面的代码将编译,但不清楚哪个Guid被实例化。但是,如果using语句位于namespace块内,则会引发编译器错误。
  6. 有关更完整的讨论,请参阅the related StyleCop documentation