【问题标题】:c# using statements placement [duplicate]c#使用语句放置[重复]
【发布时间】:2011-02-28 01:13:19
【问题描述】:

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

我正在查看一个代码库,其中作者(我尊重的作者)始终将 using 语句放置在命名空间内,而不是在命名空间之上。这样做有什么好处(更高效的 GC?)还是这只是代码风格偏好?

干杯,
浆果

【问题讨论】:

标签: c# using-statement


【解决方案1】:

Scott Hanselman 在 2008 年 7 月做了一个 post about this。我不知道这是否随着 .NET 4 框架而改变,但它基本上归结为一个偏好问题,除非你将你的类命名为与现有的类以及单个文件中的多个命名空间。

【讨论】:

    【解决方案2】:

    这是 MS 推荐练习。 stylecop等程序推荐。

    查看Is sa1200 All using directives must be placed inside the namespace (StyleCop) purely cosmetic? 进行更深入的讨论

    【讨论】:

    • StyleCop 不是微软,它只是微软几个人编写的工具。
    【解决方案3】:

    这是一种偏好,但在某些情况下,当您在内部和外部使用语句时存在语义差异。

    using Bar;
    
    namespace Foo
    {
        using Bar;
    
        namespace Bar
        {
            class C
            {
            }
    
        }
    
        namespace Baz
        {
            class D
            {
                C c = new C();
            }
        }
    }
    
    namespace Bar
    {
        class E
        {
        }
    }
    

    在此,外部 using 语句引用命名空间 Foo 之后的命名空间 Bar。内部 using 语句指的是 Foo 内部的 Bar。如果 Foo 内部没有 Bar,那么内部也将引用外部 Bar。

    编辑 正如 Jonathan 指出的那样,内部 using 可以更改为 `using global::Bar;" 以引用 out Bar 命名空间,这会破坏此特定代码,因为D 尝试使用 C。

    【讨论】:

      【解决方案4】:

      不要在没有使用“global::”的情况下将它们放入内部,否则您的代码会变得脆弱。

      namspace bar {
         using foo //this may mean "using global::bar.foo OR using global::foo"
      
      }
      

      参考

      http://blogs.msdn.com/b/ericlippert/archive/2007/06/25/inside-or-outside.aspx?wa=wsignin1.0

      【讨论】:

      • 嗯,在实践中,这几乎不是问题。人们通常不会使用奇怪的碰撞来创建名称空间。在现实生活中我从来没有被这个咬过。
      • 我怀疑与您合作的开发人员比我们其他人处理的开发人员要复杂一点。即便如此,我们最终还是得到了 System.Data 和 System.Windows.Data,这确实与 VB 导入规则相混淆。
      【解决方案5】:

      如果您在同一个文件中有多个命名空间,那么您将仅将 usings 范围限定为包含命名空间,而不是整个文件中的所有命名空间。

      另见(刚刚发现这个很好的解释)Should 'using' statements be inside or outside the namespace?

      【讨论】:

      • 但是,如果您遵守每个文件 1 个类的准则,这不是问题。
      猜你喜欢
      • 2010-10-04
      • 2014-01-20
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 2016-05-31
      相关资源
      最近更新 更多