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

时间:2009-09-04 15:03:34

标签: c# object

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

对象是否完全合格但是仍然声明了使用声明?

8 个答案:

答案 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的类型为FooA.A.Foo),B.B的类型为FooB.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.BarA.A.FooBarB.B.QuxA.A.Quux类型。您可能希望保留using语句。

答案 4 :(得分:0)

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

  1. 人们倾向于依靠Intellisense找到他们正在寻找的课程。
  2. 代码已从其他地方粘贴。
  3. 坏习惯会变得很难。
  4. 一个很好的问题是Visual Studio中是否存在消除此冗余的方法。我不知道这样的工具(可能是类似CodeRush的东西),但也许有人会在这里评论一个。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

我可以想到几个原因:

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

答案 7 :(得分:0)

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