我有一个类维护另一个类的对象列表。对象列表是公共(public)属性。我想阻止用户直接添加和删除对象到这样的列表:
MyObject.MyListProperty.Add(object);
相反,我希望他们使用在内部进行一些处理然后将对象添加到列表的方法。
我有一些想法:
- 创建
List<T>
的后代并覆盖添加和删除 - 通过属性getter返回列表的新副本(列表比较短,不超过30个对象)
有没有没有Add和Remove的集合接口(interface)?
编辑:
我要选择 ReadOnlyCollection<T>
.原因是包装的集合可以更新,并且更改将在只读对象中立即可见(请参阅 ReadOnlyCollection<T>
和 AsReadOnly()
的 MSDN 代码示例)。这允许只创建一次只读列表。
IEnumerable
的问题是那个对象可以转换回原来的 List<T>
接着
直接操纵。
最佳答案
您可以使用 ReadOnlyCollection - 将您的收藏品包裹在此并返回 ReadOnlyCollection
给你类(class)的用户:
return new ReadOnlyCollection(innerCollection);
或使用 AsReadOnly
List<T>
的方法类:
return innerCollection.AsReadOnly();
IEnumerable界面将满足您的需求,因为它只有一个成员 GetEnumerator()
,这只会让您迭代项目。
关于c# - 是否有阻止添加对象的 .NET 集合接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2176246/