我在我的类中有一个名为foos
的ICollection<T>
,我想将其公开为只读(请参见此问题)。我看到接口定义了一个属性.IsReadOnly
,这似乎很合适...我的问题是:如何让类的使用者明确知道foos
是只读的?
我不想依赖于他们记住在尝试未实现的方法(例如.Add()
)之前查询.IsReadOnly
。理想情况下,我想将foos
公开为ReadOnlyCollection<T>
,但它没有实现IList<T>
。我应该通过一个名为GetReadOnlyFooCollection
的方法来公开foo
,而不是通过属性来公开吗?如果是这样,那么这不会让某些人混淆并期望得到ReadOnlyCollection<T>
吗?
这是C# 2.0,因此像ToList()
这样的扩展方法不可用...
ToList
创建一个新的容器对象,并将所有的Foo引用复制到其中,如果foos
很大,这将是一项昂贵的操作。由于ReadOnlyFoos
是计算复杂度为O(N),根据类库指南的建议,更好的方法是创建一个名为GetFoosAsReadOnly()
的方法。 - Edward Brey