命名空间访问器。 “使用”访问者

时间:2013-10-30 17:48:04

标签: c# .net

理论问题:这样做有什么区别:

using System;
...
var foo = new String("foo");

和此:

var foo = new System.String("foo");

加载DLL?性能差异?

主要是,我怀疑在这种情况下最好的代码实践是什么?

4 个答案:

答案 0 :(得分:9)

不,它们将被编译为完全相同的IL。

using directive(没有“名称空间访问器”这样的术语)只是一种告诉C#编译器在尝试将简单名称解析为完全合格的。

(当然两者都无法编译,因为.NET中没有String(String)构造函数,但这是另一回事。)

请注意,使用内置别名string与使用System.String类型相同 - 它实际上只是一个别名。例如:

// Just one type!
string x = new String(new char[10]);

答案 1 :(得分:5)

同样的事情。使用你喜欢的任何一个。我使用using,并在发生名称冲突时回退到全名。

答案 2 :(得分:4)

它对性能或负载没有影响。

它可能会影响IDE性能 - 例如,如果您使用using指令,它会添加IDE必须查找的位置以解析Intellisense。这不是不使用它们的理由,但可能是将它们保持在最低限度的原因,并避免使用未使用的using指令。

作为编码实践,如果在不同的命名空间中具有类似命名的类,则using指令可能会导致混淆。例如,假设您正在创建一个具有名为Tasks的关键对象的待办事项应用程序,但您也在使用Threading.Tasks进行一些线程处理。你不想在那里使用using指令。

答案 3 :(得分:1)

正如其他人所说,没有性能优势。不使用使用的一个好处是避免名称空间歧义。假设您有两种不同类型的页面,一种是指您网站上的页面,另一种是指书籍中的页面。它们是具有不同属性的两个离散对象。在这种情况下,您必须写出整个命名空间,以便能够区分您所引用的页面类型。