gpt4 book ai didi

c# - 在 C# 中设置树节点父节点的正确方法?

转载 作者:行者123 更新时间:2023-11-30 14:42:03 25 4
gpt4 key购买 nike

我正在制作一棵自定义树。每个节点(BindingNode 我就是这样调用它们的)都包含一个 BindingNodeCollection,它实现了 ICollection。并包含更多节点。我的问题是,用户应该能够使用名为 Parent 的只读属性访问每个节点的父节点,就像在 TreeNode 中一样。 .但是通过调用 BindingNodeCollection 的 Add(BindingNode node) 方法将节点添加到 BindingNodeCollection。 BindingNodeCollection 知道它自己的父级是什么,但是不能在 Add(BindingNode node) 方法中分配 BindingNode 的父级,因为父级应该是只读的。我试图实现的功能与 TreeNode 的功能基本相同和一个 TreeNodeCollectionTreeView :

-TreeNode 的父节点是只读的。

-通过调用 TreeNodeCollection 的 Add(TreeNode node) 方法将 TreeNode 分配给 TreeNodeCollection。

-TreeNode 的 Parent 给出包含添加了 TreeNode 的 TreeNodeCollection 的 TreeNode。

-TreeNodeCollection 未在 TreeNode 中定义,以便访问 Parent 私有(private)字段。

这是我想念 C++ 的 friend 的时候。 :(

最佳答案

有多种方法可以实现您的目标,这实际上取决于您预想需要的安全性。这是只有您或您的同事会接触的图书馆或“封闭”应用程序吗?这里有一些建议和问题,在使用它们之前需要考虑。

  1. 将 BindingNode 上的属性 setter 设置为内部设置;你相信在座的每一个人都不会成为孤儿吗?

  2. 将 BindingNodeCollection 公开为 ReadOnly 并提供修改集合的方法在 BindingNode 本身上。 Add 可以设置私有(private)的Parent 属性。需要删除才能将 Parent 属性设置回 null。 这已经非常锁定了,污染你的基节点类值得安心吗?

  3. 接受透明性对您来说比安全性更重要的事实,并将 Parent setter 公开为公开。 您是否相信能够看到您的类(class)的所有人不会成为孤儿?

为了进一步阅读和更好的想法,您几乎描述的是 Composite Pattern .关于此模式的安全性与透明度的讨论TON,其中大部分涉及公开这些类以供公众在某些 API 中使用。对于您的情况来说,这可能有点矫枉过正,或者这可能正是您需要考虑的问题,我不知道您的问题是什么范围。

关于c# - 在 C# 中设置树节点父节点的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3452376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com