当前位置 : 主页 > 编程语言 > c语言 >

在c#中管理父子实现树

来源:互联网 收集:自由互联 发布时间:2021-06-25
我正在实现一个树,把它想象成一个文件夹结构,所以我有一个看起来像这样的类: 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(); 
    }
}
网友评论