在我的C#项目中,我有一个包含列表的类
public class MyClass
{
public MyClass parent;
public List<MyClass> children;
...
}
我想防止该类的用户向子列表添加(和删除)元素,但他仍将能够解析其元素。我想处理MyClass中的添加和删除,提供一个AddChild(MyClass项目)和DeleteChild(MyClass项目),以确保在将一个项目添加到子级列表时,该项目的父级将被正确设置。
除了实现自己的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
等)。