如果调用代码仅对集合进行迭代,是否有任何理由将内部集合公开为ReadOnlyCollection而不是IEnumerable?
class Bar
{
private ICollection<Foo> foos;
// Which one is to be preferred?
public IEnumerable<Foo> Foos { ... }
public ReadOnlyCollection<Foo> Foos { ... }
}
// Calling code:
foreach (var f in bar.Foos)
DoSomething(f);
如我所见,IEnumerable是ReadOnlyCollection接口的子集,它不允许用户修改集合。因此,如果IEnumberable接口足够了,那就可以使用它。这是推理的正确方法,还是我错过了一些东西?
谢谢/ Erik
ReadOnlyCollection
如果您很偏执,您仍然希望将返回的集合包装在a中,但是现在您不再局限于特定的实现了。