集合与ICollection

时间:2010-10-21 11:31:53

标签: asp.net collections icollection

我已经为测试集合和ICollection创建了一个虚拟项目。我有一个用户类,想要创建一个集合。例如 -

ICollection<User> users = new Collection<User>();
Collection<User> users = new Collection<User>();

无论我使用Collection还是I collection,这两个代码都运行正常。现在谁能告诉我上面两行之间的区别是什么?

提前致谢。

4 个答案:

答案 0 :(得分:3)

第一行ICollection<User> users = new Collection<User>();创建对实现ICollection接口的对象(Collection)的引用,而第二行Collection<User> users = new Collection<User>();创建对对象的引用,该对象是类Collection的具体实现,其中T =用户。

在使用术语中,您将使用ICollection引用,其中您的后续代码需要与其处理的集合类型无关,即您可以提供任何实现ICollection的对象,您的代码仍然可以工作。如果您的代码没有紧密耦合(我们当然都需要),那就太好了。

使用Collection作为参考将您的处理代码紧密地耦合到Collection类,这是ICollection的特定实现,虽然您可能仍然只使用接口中定义的方法,但您也可以使用该类的某些特定功能然后您赢了无法用不同的东西轻松替换收集对象。这有很好的理由,但它有点超出了答案的范围,在这里搜索依赖注入和控制反转,我相信你会找到大量的背景信息。

答案 1 :(得分:2)

ICollection是一个接口。 Collection实现ICollection,因此它可以工作。 ICollection不是一个类,所以这不起作用:

ICollection<User> users = new ICollection<User>();

..因为你无法实例化一个接口。界面只描述了必须类实现的内容。

答案 2 :(得分:2)

Collection<T>只是ICollection<T>的一个实现。如果有人创建了另一个从ICollection<T>实现的类,您可以通过将第一行替换为:

来轻松使用该类。
ICollection<User> users = new MyCustomCollectionCollection<User>();

稍后在代码中,您不必修复任何内容,因为仍然使用相同的界面。

答案 3 :(得分:0)

因为users是参考。在两个样本中它指向同一个对象。行为由对象类定义,并且是相同的。