我正在查看具有正确的using语句的代码,但是当代码中的对象不需要由于声明using语句这一事实时,它们是完全限定的。
对象是否完全合格但是仍然声明了使用声明?
答案 0 :(得分:3)
也许在对象完全合格后添加了using语句?另一个不太可能的原因是与正在使用的对象存在名称空间冲突。
答案 1 :(得分: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可以回答相同的问题,但并不总是可用。
答案 2 :(得分:1)
有时名称空间“冲突” - 在多个名称空间中存在同名的类,并且完全限定它们可以区分它们。
答案 3 :(得分:1)
可能是因为两个导入的命名空间中存在冲突的名称。
说,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
语句。
答案 4 :(得分:0)
有很多原因。一些可能是:
一个很好的问题是Visual Studio中是否存在消除此冗余的方法。我不知道这样的工具(可能是类似CodeRush的东西),但也许有人会在这里评论一个。
答案 5 :(得分:0)
当您使用某些内置的重构时,它们有时会完全限定对象。这样可以更安全地避免编译器混淆。
答案 6 :(得分:0)
我可以想到几个原因:
答案 7 :(得分:0)
可能发生这种情况的一个原因是:自动生成的代码。 (比如Windows窗体设计器生成的代码)