在我的C#-project中,我有一个包含List的类
public class MyClass
{
public MyClass parent;
public List<MyClass> children;
...
}
Run Code Online (Sandbox Code Playgroud)
我想阻止类的用户向子列表添加(和删除)元素,但他仍然可以解析其元素.我想在MyClass中处理添加和删除,提供AddChild(MyClass项)和DeleteChild(MyClass项),以确保在将项添加到子列表时,将正确设置该项的父项.
除了实现我自己的IList之外,还有任何想法吗?
先谢谢你,弗兰克
Mar*_*ell 30
如果你给来电者打电话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;
}
}
Run Code Online (Sandbox Code Playgroud)
(yield return防止他们只是施放它)
调用者仍然可以使用foreach上.Children,并感谢LINQ可以做所有的其他有趣的事情太(Where,First,等).
ba_*_*end 14
除了实现你自己,IList<T>你可以返回一个ReadOnlyCollection<MyClass>.
public MyClass
{
public MyClass Parent;
private List<MyClass> children;
public ReadOnlyCollection<MyClass> Children
{
get { return children.AsReadOnly(); }
}
}
Run Code Online (Sandbox Code Playgroud)