【发布时间】:2012-08-08 02:15:03
【问题描述】:
我有一个接口和一个实现它的类。现在我想在这个类中收集一些东西。 我应该在它的 interface 部分使用 ICollection 并在具体的 class 部分使用 Collection 吗?
在这两个部分中使用 ICollection 是否更好、更灵活?
另外:我说的“东西”我想在我的类中保留它们的集合,它们也是我拥有的其他一些类的对象,这些类也有自己的接口。那么最好的做法是什么?当我想将它们保存在集合中时,我什至应该使用这些类的接口类型吗?
【问题讨论】:
-
我会将其初始化为
ICollection<Foo> bar = new List<Foo>(); ...之类的东西,然后从那里(课堂内外)使用ICollection<Foo>。希望我正确理解了这个问题。请注意,ICollection<Foo>对于您的需求可能过于原始,因此IList<Foo>会更好地工作。这是我最终做过一次的事情——从ICollection切换到IList,因为我需要有顺序,而不是使用像一组一般的东西。 -
是的,你理解正确..就我问题的第二部分:你推荐 ICollection
还是使用 ICollection ... Foo 类的接口 -
尽量保持实际。如果您确实计划更改实现
IFoo的行为并替换为不同的东西,那么是的,您确实需要IFoo(我希望 C# 足够聪明,能够识别等价;我还没有尝试过) .如果您不需要更改Foo的实现,那么可能没有充分的理由创建IFoo。使用ICollection<Foo>更有意义 - 您希望能够使用不同的数据结构,比如您是否突然需要更好的性能。你可以用说 dequee 代替 List 并且仍然很好 -
嗯,订购?等一下!所以如果我稍后对它们执行 ForEach 循环,我添加到 Collection 的东西不会显示在已添加到集合中的 smae 订单上?我们可能有某种 OrderredCollection 吗?
-
是的,有msdn.microsoft.com/en-us/library/ee211538.aspx。你必须问问自己你真正的需求是什么。我意识到我开始竭尽全力支持
ICollection,但后来意识到我需要的只是支持一个数组和一个列表95%。另外 5% 的时间我可以打电话给.ToList()或.ToArray();我负担得起这样做的费用。这与 C# 最酷的功能之一:params T[]配合得很好。我从来没有最终需要OrderedSet,但只有你最清楚你的问题(将)需要什么。
标签: c# collections