gpt4 book ai didi

c# - 为树状结构设计界面

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:35 25 4
gpt4 key购买 nike

假设我有两个类,它们都具有与树结构相关的属性:它们具有相同类型的父节点和子节点。

public class FooNode
{
FooNode ParentNode { get; set; }
ICollection<FooNode> ChildNodes { get; set; }
/* ... */
}

public class BarNode
{
BarNode ParentNode { get; set; }
ICollection<BarNode> ChildNodes { get; set; }
/* ... */
}

我想设计一个接口(interface)来描述结构。我想到了这个:

public interface ITreeNode
{
ITreeValue ParentNode { get; set; }
ICollection<ITreeValue> ChildNodes { get; set; }
}

但是要实现接口(interface),ParentNodeChildNodes 必须引用ITreeNode 类型而不是实现。因此我不能:

public class FooNode : ITreeNode
{
FooNode ParentNode { get; set; }
ICollection<FooNode> ChildNodes { get; set; }
/* ... */
}

界面迫使我这样做:

public class FooNode : ITreeNode
{
ITreeNode ParentNode { get; set; }
ICollection<ITreeNode> ChildNodes { get; set; }
/* ... */
}

这是我不想要的,因为我失去了父节点和子节点与节点类型相同的契约。

我该如何解决这个问题?如何设计和实现通用树节点的接口(interface)?

最佳答案

你可以使用泛型:

public interface ITreeNode<T> where T : ITreeNode<T>
{
T ParentNode { get; set; }
ICollection<T> ChildNodes { get; set; }
}

public class FooNode : ITreeNode<FooNode>
{
public FooNode ParentNode { get; set; }
public ICollection<FooNode> ChildNodes { get; set; }
}

关于c# - 为树状结构设计界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31605293/

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