IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    在C#的namespace内使用using语句

    shendao发表于 2016-05-22 16:30:43
    love 0

    正如这篇讨论提到的, Should ‘using’ statements be inside or outside the namespace ,在公司使用的 StyleCop 经常会提示,建议将 using 语句放在 namespace 内部。原本的讨论中已经讲得听清楚了,这里做个小结。

    举例,在代码片段 File1.cs 中,我们在 Outer.Inner 这个命名空间内声明了一个类 Foo,其中有一个静态函数 Bar() 会用到 Math 这个全局变量。

    // File1.cs using System; namespace Outer.Inner {     class Foo     {         static void Bar()         {             double d = Math.PI;         }     } }

    加入现在有第二个代码片段 File2.cs,在 Outer 这个命名空间内声明了一个类 Math。

    // File2.cs namespace Outer {     class Math     {     } }

    于是,在 Foo.Bar() 中,当执行到 Math 时,系统会首先到命名空间 Outer 中去寻找 Math 的定义,其次才是去命名空间外的 System 中去寻找。由于我们已经在 Outer 中定义了 Math, Foo.Bar() 会直接调用 Outer.Math 而不是 System.Math ,而 Outer.Math 并没有成员 PI,因此 File1 会报错。所以,当我们把 File1 中的 using 语句放到命名空间内之后,程序则一切正常。

    // File1b.cs namespace Outer.Inner {     using System;     class Foo     {         static void Bar()         {             double d = Math.PI;         }     } }

    注意

    如果我们的 File1 是这样子,即 Foo 跟 File2 中的 Math 同在命名空间 Outer 内,这个时候 Foo.Bar() 会直接使用 Outer.Math,而不是 System.Math,不管 using 是放在命名空间内还是外。

    // File1b.cs namespace Outer {     using System;     class Foo     {         static void Bar()         {             double d = Math.PI;         }     } }

    这也说明了一点, 程序总总是先看自己同一命名空间中的定义,其次再看同一命名空间中的 using 语句 ,如果都没找到再去外层命名空间中按照同样的顺序查找。

    正如这篇讨论提到的, Should ‘using’ statements be inside or outside the namespace ,在公司使用的 StyleCop 经常会提示,建议将 using 语句放在 namespace 内部。原本的讨论中已经讲得听清楚了,这里做个小结。

    转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 在C#的namespace内使用using语句



沪ICP备19023445号-2号
友情链接