我正在实现一个树,把它想象成一个文件夹结构,所以我有一个看起来像这样的类: public class Folder{ //Various Props like Name etc. public IListFolder Children{get;} public Folder Parent {get;}} 现在我想要的是
public class Folder { //Various Props like Name etc. public IList<Folder> Children{get;} public Folder Parent {get;} }
现在我想要的是能够在树上走来走去,所以给了一个根,我可以找到一片叶子,并给出一片叶子,我可以找到根节点.所以每个孩子都需要父母.现在问题是将新节点添加到树的最佳方法是什么.我过去使用过两种解决方案:
>将AddChild(Folder)方法添加到处理添加文件夹的Folder,并设置父级.这个问题是我现在必须锁定我的Children集合,所以你不能绕过这个方法.
>创建我自己的Children集合,该集合将被提供给实例的引用,因此它可以处理在add上设置父级.这个问题我必须实现一个新的集合.
>使用在添加或删除项目时具有事件的集合.
我很好奇人们通常使用什么模式,然后如果有人对我的具体用例有任何建议.我正在使用nHibernate将我的树持久化到SQL服务器.我宁愿不实现自定义集合,因为它是很多代码,可以让它适用于我的应用程序的一小部分.
看完 on MSDN之后你可以试试这个:List<Folder> children; public ReadOnlyCollection<Folder> Children { get { return this.children.AsReadOnly(); } }
如果您的私有成员必须声明为IList,那么我们可以将其复制到列表中然后返回它.但我真的没有看到使用具体实现作为私有成员的问题.稍后更改实现不会破坏兼容性.
IList<Folder> children; public ReadOnlyCollection<Folder> Children { get { return new List<Folder>(this.children).AsReadOnly(); } }