2012-02-07 141 views
4

在下面的例子中,哪一个最好用。正如你所看到的,我只使用列表集合,而没有其他名字空间。是这样的,当执行Example1时,名称空间system.collections.generic下的所有类都被加载到内存中或什么?两个例子的行为如何?c中的命名空间#

Example1: 

using System.Collections.Generic; 
public interface ICustomer 
{ 
    List<Customer> GetAll(); 
} 


Example2: 

public interface ICustomer 
{ 
    System.Collections.Generic.List<Customer> GetAll(); 
} 

回答

0

这两个示例的行为完全相同(请记住它们都编译为中间代码)。我更喜欢1,但这是为了清晰,而不是如何表现。

1

它们是相同的;你不应该担心using语句,因为它主要影响智能感知性能

而且在名称冲突的情况下,你可以这样做:

using Generic = System.Collections.Generic; 
public interface ICustomer 
{ 
    Generic.List<Customer> GetAll(); 
} 
+1

在我看来,唯一的用途是当你有名称冲突,不想写出其中一个命名空间的整个名称空间。除此之外,它混淆了代码并使其更难阅读。 – 2012-02-07 08:11:30

+0

事实上,现在您必须知道System.Collections.Generic的泛型。如果我看到这一点,我认为Generic.List代表的是比.net库定制的东西。 – RvdK 2012-02-07 08:32:35

+0

只是好奇,为什么答案得到了downvote!如果有问题,请告诉我,我会删除答案! – fardjad 2012-02-07 08:37:11

0

它将使唯一的区别是智能感知。在文件中添加更多using语句会增加Intellisense必须进行索引和显示的内容。我发现示例2的可读性的好处值得Intellisense所做的额外工作。

除此之外,这两个示例都以相同的方式编译为CIL,并且对性能完全没有影响。

+0

而且增加的工作并不多。即使我的上网本与Intellisense没有问题。 – 2012-02-07 08:09:06

0

AFAIK使用两者都没有真正的好处。第二个更加冗长,可能会让代码阅读变得更加困难。如果你必须在你的接口/类中多次引用List类型,我建议包括相关的命名空间,以减少冗长。

尽管如此,这已经在SO上讨论了几次:例如,herehere

0

取决于使用情况。如果你有很多同名的班级,例如有另一类也叫List,第二种方法比较好(更清晰)。

否则,我更喜欢使用方法1来使用更清晰的&格式化代码。

0

如果你认为你将需要另一个函数来创建一个更加列表 - 你用前人的精力例1,

,但如果这是这个名单的唯一实例 - 这并不重要,如果它是练习1或EX2。

(只为序 - 我会为您提供在EX1至使用)

而且 - 不,当你使用Using - 不是所有的库加载...什么是加载 - 只是,对于例如,您拨打的List

好 - 好运!

1

只有编译器需要using语句来导入名称空间。它是一个捷径,所以你不需要完全限定你正在使用的类型。

我喜欢导入所有名称空间,如果我只在该名称空间中使用一种类型。要删除不需要的名称空间,可以使用Visual Studio的函数来组织名称空间。

5

第一种情况让你在你的班级开始时声明你打算在你的班级中使用什么(你的联结)。 声明,以及其他用途,使用你的IDE和编译器:

  • 启用智能感知(自动完成)
  • 激活扩展方法(如LINQ的扩展方法)

所以没有宣布他们你会松动这个功能。 这种用法是可取的。它也提高了代码的可读性。 即使Visual Studio不强烈鼓励您保持用例清洁(例如,在基于Java的环境中显示警告等),但始终优先选择从上下文菜单中执行“删除未使用的导入”在你的课堂文件上。

第二种情况允许您使用通过完全限定名称显式引用它的类型。 这种情况下通常使用只有在名称冲突的情况下。

最终,二进制编译的代码将是相同的,因为编译器会优化它,但如果使用第一种方法,编译过程本身可能会更有效。

+0

+1用于记忆延伸方法 – 2012-02-07 08:12:55