【问题标题】:.NET namespaces and using statements [duplicate].NET 命名空间和 using 语句 [重复]
【发布时间】:2010-10-22 03:50:08
【问题描述】:

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

有什么区别

namespace x
{
  using y;
}

using y;
namespace x
{
}

?

【问题讨论】:

    标签: .net namespaces


    【解决方案1】:

    第一个 y 仅用于命名空间 x,第二个 y 用于整个文件,因此可能是其他命名空间。如果您为每个文件保留一个命名空间(我猜这是惯例),那么通常并没有真正的区别[但如果不同类型在不同的命名空间中具有相同的名称,请参阅 Marc 关于冲突的评论]。如果您使用 StyleCop,它会希望您将 usings 保留在命名空间内。

    【讨论】:

    • 实际上,我似乎记得可能有所不同... 如果在不同级别存在冲突类型等。
    • 另外一个(更实际的)区别......其中一个可能会使 LINQ-to-SQL 代码生成器崩溃,而另一个则不会;-p
    【解决方案2】:

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

    1. 正如@Steve Haigh 提到的,using 语句仅在块内有效,因此如果有其他namespace 块,它们不会受到影响。
    2. using 指定的命名空间可以根据外部namespace 块缩短。所以命名空间外的using x.y; 可以在namespace x 块内表示为using y;
    3. using 放入命名空间会导致编译器保证指定的命名空间不会被覆盖。例如:
          using Guid = System.Guid;
          namespace Sample
          {
              public class Guid {}
              public class Program
              {
                  public static void Main()
                  {
                      Console.WriteLine(new Guid());
                  }
              }
          }
      上面的代码会编译,但不清楚哪个Guid 正在被实例化。但是,如果 using 语句位于 namespace 块内,则会引发编译器错误。

    请参阅the related StyleCop documentation 以获得更完整的讨论。

    【讨论】:

    • +1。那里有有趣的边缘案例。
    猜你喜欢
    • 2012-09-20
    • 2016-04-03
    • 2011-07-06
    • 1970-01-01
    • 2014-07-13
    • 2014-06-18
    • 2020-05-20
    • 2019-08-08
    • 1970-01-01
    相关资源
    最近更新 更多