繁体   English   中英

当声明了using语句时,为什么有人会完全限定代码中的Object?

[英]why would someone fully qualify an Object in code when there is a using statement declared?

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

是否有理由说明对象是完全合格的,但仍声明了using语句?

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

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

当使用相对少见的类时,它将提供有关该类的很多信息。 而且我喜欢在代码中放入信息。 考虑:

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

要么

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

我完全意识到这种不一致,并且“何时使用”是任意的。 但是,对于阅读此代码的人来说,很多问题在出现之前都会得到回答。

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

有时,命名空间会发生冲突-多个命名空间中存在相同名称的类,并且完全限定它们的作用即可将它们区分开。

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

例如, AA的类型称为FooAAFoo ),而BB的类型称为FooBBFoo )。 如果您这样做:

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 BB; 声明? 好吧,假设您还使用了BBBarAAFooBarBBQuxAAQuux 您将要保留using语句。

原因很多。 一些可能是:

  1. 人们倾向于依靠Intellisense来查找所需的课程。
  2. 代码已从其他位置粘贴。
  3. 坏习惯会变得很难。

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

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

我可以想到一些原因:

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

发生这种情况的原因之一:自动生成的代码。 (例如Windows Forms设计器生成的代码)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM