[英]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
的类型称为Foo
( AAFoo
),而BB
的类型称为Foo
( BBFoo
)。 如果您这样做:
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;
声明? 好吧,假设您还使用了BBBar
, AAFooBar
, BBQux
和AAQuux
。 您将要保留using
语句。
原因很多。 一些可能是:
一个很好的问题是Visual Studio中是否存在消除这种冗余的方法。 我不知道这种工具(可能类似于CodeRush),但也许有人会在这里发表评论。
当您使用一些内置的重构时,它们有时会完全限定对象。 这样可以更安全地避免编译器混乱。
我可以想到一些原因:
发生这种情况的原因之一:自动生成的代码。 (例如Windows Forms设计器生成的代码)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.