【问题标题】:why would someone fully qualify an Object in code when there is a using statement declared?当声明了 using 语句时,为什么有人会完全限定代码中的对象?
【发布时间】:2009-09-04 15:03:33
【问题描述】:

我正在查看声明了正确 using 语句的代码,但由于声明了 using 语句,代码中的对象在不需要时是完全限定的。

对象是完全限定的,但仍然声明了 using 语句,有什么原因吗?

【问题讨论】:

    标签: c# object


    【解决方案1】:

    也许 using 语句是在对象完全限定之后添加的?另一个不太可能的原因是与正在使用的对象存在命名空间冲突。

    【讨论】:

      【解决方案2】:

      为什么有些人(比如我)故意这样做:

      当使用一个相对稀有的类时,它提供了很多关于该类的信息。我喜欢在代码中加入信息。考虑:

      System.Runtime.Serialization.Formatters.Soap.SoapFormatter formatter = 
           new SoapFormatter();  // .NET 2
      

      或

      var formatter = new  // .NET 3
         System.Runtime.Serialization.Formatters.Soap.SoapFormatter.SoapFormatter();  
      

      我完全了解不一致之处,并且“何时使用”有点随意。但是对于阅读此代码的人来说,很多问题在出现之前就已经得到了解答。

      Intellisense 可以回答相同的问题,但并不总是可用。

      【讨论】:

      • 我不太确定额外信息所带来的好处是否超过了它引入的可读性问题。就个人而言,在不需要完全合格的令牌时看到它们是我的烦恼之一,我认为这是因为它看起来很混乱且难以阅读。让我们面对现实吧,智力通常是可用的。显然,如果出于此处提到的各种原因需要它,那么您必须处理它。我对编译代码的渴望超过了可读代码,只是。
      • @Andy - 我不同意。对于不熟悉特定命名空间的人,尤其是那些引用一大堆命名空间的代码,上述内容确实使代码更易于阅读。虽然我已经尝试过,但我始终无法使用智能感知来处理打印输出。
      • 我们显然只是以不同的方式工作,杰夫。老实说,我很少需要知道一个类的完整命名空间,这通常不会影响我正确使用它的能力。当然,它必须命名良好,但大多数类都是(至少在 .Net 框架中)。我认为我们将不得不同意不同意这一点,尽管我可以肯定地说我从来没有发现自己打印过代码,即使是作为审查过程的一部分。
      【解决方案3】:

      有时命名空间“冲突” - 在多个命名空间中有同名的类,完全限定它们可以区分它们。

      【讨论】:

        【解决方案4】:

        这可能是因为两个导入的命名空间中存在冲突的名称。

        比如说,A.A 有一个名为Foo (A.A.Foo) 的类型,而B.B 有一个名为Foo (B.B.Foo) 的类型。如果你这样做:

        using A.A;
        using B.B;
        
        // class definitions... etc
            var x = new Foo(); // which foo?
        

        如果您不想完全限定它,您可以这样做:

        using A.A;
        using B.B;
        using AFoo = A.A.Foo;
        using BFoo = B.B.Foo;
        
        // class definitions... etc
            var x = new AFoo();
        

        为什么不简单地删除using B.B; 语句?好吧,假设您也在使用类型B.B.Bar、A.A.FooBar、B.B.Qux 和A.A.Quux。你会想要保留using 语句。

        【讨论】:

          【解决方案5】:

          有很多原因。一些可能是:

          1. 人们倾向于依靠 Intellisense 来查找他们正在寻找的课程。
          2. 代码已从别处粘贴。
          3. 坏习惯很难改掉。

          一个很好的问题是 Visual Studio 中是否存在消除这种冗余的方法。我不知道有这样的工具(可能是 CodeRush 之类的工具),但也许有人会在这里发表评论。

          【讨论】:

          • 是的,CodeRush/重构!专业人士做到了。
          • 我反对“坏习惯”。 (-:
          【解决方案6】:

          当您使用某些内置重构时,它们有时会完全限定对象。这样更安全,可以避免编译器混淆。

          【讨论】:

            【解决方案7】:

            我能想到几个原因:

            1. 有多个 using 语句,嵌套或包含在同一行中,方法属性属于哪个对象存在一些歧义
            2. using 块特别长,语句本身可能不在屏幕上。限定方法和属性可以使其对其他程序员更具可读性。
            3. 项目中可能有一些非常初级的程序员可能不太理解 using 语句,而程序员可能会尝试使其更易于阅读。

            【讨论】:

              【解决方案8】:

              发生这种情况的一个原因是:自动生成的代码。 (如 Windows 窗体设计器生成的代码)

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-08-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多