在我的 C# 项目中,我有一个包含列表的类
public class MyClass
{
public MyClass parent;
public List<MyClass> children;
...
}
我想阻止类的用户向子列表添加(和删除)一个元素,但他仍然能够解析它的元素。我想处理 MyClass 中的添加和删除,提供 AddChild(MyClass item) 和 DeleteChild(MyClass item) 以确保在将项目添加到子列表时,将正确设置该项目的父项。
除了实现我自己的 IList 之外,你知道如何做到这一点吗?
提前致谢, 弗兰克
最佳答案
如果您将 List<T>
交给来电者,你无法控制这个;你甚至不能继承 List<T>
,因为添加/删除不是 virtual
.
相反,我会将数据公开为 IEnumerable<MyClass>
:
private readonly List<MyClass> children = new List<MyClass>();
public void AddChild(MyClass child) {...}
public void RemoveChild(MyClass child) {...}
public IEnumerable<MyClass> Children {
get {
foreach(var child in children) yield return child;
}
}
(yield return
阻止他们只是施放它)
来电者仍然可以使用foreach
在 .Children
,感谢 LINQ,他们也可以做所有其他有趣的事情( Where
、 First
等)。
关于c# - 禁止对 List<T> 公开添加和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3052991/