我想知道开发人员在使用Visual Studio 2008中的“删除未使用的Usings
”功能时,除了整理源代码之外,是否还有其他原因?
我想知道开发人员在使用Visual Studio 2008中的“删除未使用的Usings
”功能时,除了整理源代码之外,是否还有其他原因?
取出这些using
语句的原因有几个。
using
语句。另一方面,留下这些using
语句的理由并不多。我想你可以节省删除它们的工作量。但如果你那么懒,那你就有更大的问题了!
我想说的恰恰相反 - 删除不必要的using语句非常有帮助。
想象一下,你需要在3、6、9个月后返回你的代码 - 或者其他人需要接手你的代码并进行维护。
如果你有一长串的using语句,并且其中有些其实并不需要,那么看起来可能非常令人困惑。为什么要在这里使用这个命名空间,如果从该命名空间中没有使用任何东西呢?
我想在专业环境中考虑长期可维护性时,强烈建议保持你的代码尽可能干净 - 这包括从代码中删除不必要的东西。少点混乱就意味着更高的可维护性。
Marc
除了已经提到的原因,它还可以防止不必要的命名冲突。请考虑这个文件:
using System.IO;
using System.Windows.Shapes;
namespace LicenseTester
{
public static class Example
{
private static string temporaryPath = Path.GetTempFileName();
}
}
这段代码无法编译,因为命名空间System.IO和System.Windows.Shapes中都包含一个名为Path的类。我们可以通过使用完整的类路径来修复它,
private static string temporaryPath = System.IO.Path.GetTempFileName();
或者我们可以简单地删除此行using System.Windows.Shapes;
这对我来说似乎是一个非常明智的问题,但回答者们却以相当轻率的方式对待它。
我认为任何对源代码的更改都需要有充分的理由。这些更改可能会带来隐藏的成本,而提出这个问题的人想要了解这一点。他们并没有要求被称为“懒惰”,就像有人所暗示的那样。
我刚开始使用ReSharper,它正在对我负责的项目进行警告和样式提示。其中包括删除冗余的using指令,还有冗余的限定符、大写字母等等。我的直觉是整理代码并解决所有提示,但我的商业头脑警告我不要做出没有充分理由的更改。
我们使用自动化构建过程,因此对我们的SVN存储库进行任何更改都会生成我们无法链接到项目/错误/问题的更改,并触发自动化构建和发布,这些发布与之前版本没有任何功能上的变化。
如果我们看一下删除冗余限定符,这可能会导致开发人员混淆,因为我们域层和数据层中的类只能通过限定符来区分。
如果我看一下缩写词的正确使用(即ABCD -> Abcd),那么我必须考虑到ReSharper不会重构我们使用的引用类名的任何Xml文件。
所以,遵循这些提示并不像看起来那么简单,应该倍加尊重。智能感知弹出窗口中的选项较少(尤其是如果命名空间包含大量扩展方法)。
理论上,智能感知应该更快。
删除它们。减少代码量可以节省时间和混乱。我希望更多的人能够保持简单、整洁和有条理。这就像在你的房间里放着脏衬衫和裤子,很难看,你不得不想知道为什么会在那里。
最近我有另一个理由说明删除未使用的导入是相当有帮助和重要的。
想象一下你有两个程序集,其中一个引用了另一个(现在我们称第一个为A
,被引用的为B
)。当你在A中有依赖于B的代码时,一切都很好。然而,在开发过程中的某个阶段,你注意到实际上不再需要那段代码,但是你保留了原来的using语句。现在你不仅拥有无意义的using
指令,还拥有一个程序集引用到B
,该引用在已经废弃的指令中没有任何用处。首先,这增加了编译A
所需的时间,因为也必须加载B
。
因此,这不仅是一个更清洁、易读的代码问题,还是一个在生产代码中维护程序集引用的问题,其中并非所有这些被引用的程序集甚至不存在。
最后,在我们的示例中,我们必须将B和A一起发布,尽管B在A中除了在using
部分没有任何用途。这将严重影响A
的运行时性能,尤其是在加载程序集时。
using
指令的.cs文件,而其中只有10个被实际使用。每当你查看引用外部世界的新引入的符号时,你都必须浏览这1000行才能弄清楚它是什么。这显然会减慢上述过程的速度。因此,如果你能将它们减少到10个,这将有所帮助!using
指令非常非常弱,因为你无法指定单个泛型符号而不失去泛型性,并且你不能使用using
别名指令来使用扩展方法。但在其他语言(如Java、Python和Haskell)中则不是这种情况,在这些语言中,你能够(几乎)精确地指定你想要从外部世界获取的内容。但即便如此,我仍建议尽可能使用using
别名。