.NET 命名空间和 using 语句 [重复]

Posted

技术标签:

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

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

有什么区别

namespace x

  using y;

using y;
namespace x


?

【问题讨论】:

【参考方案1】:

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

【讨论】:

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

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

    正如@Steve Haigh 提到的,using 语句仅在块内有效,因此如果有其他namespace 块,它们不会受到影响。 using 指定的命名空间可以根据外部namespace 块缩短。所以命名空间外的using x.y; 可以在namespace x 块内表示为using y;。 将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。那里有有趣的边缘案例。

以上是关于.NET 命名空间和 using 语句 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 C# .cs 文件中放置 using 语句的位置[重复]

在 C# 中的命名空间之前或之后使用语句 [重复]

尝试从命名空间加载类您是不是忘记了另一个命名空间的“使用”语句?

创建一个新项目和捆绑包 - “您是不是忘记了另一个命名空间的 'use' 语句?”

找不到类型或命名空间名称“SqlConnection”(是不是缺少 using 指令或程序集引用?)

关于php的命名空间