gpt4 book ai didi

c# - 更改继承属性的类型(到继承类型)

转载 作者:太空狗 更新时间:2023-10-29 18:11:08 25 4
gpt4 key购买 nike

使用 C# 我有一个类,其中包含有向图的根节点等元信息。我们称其为 Container-Class。这个容器可以以两种不同的模式出现,编辑器模式和配置器模式。根据模式,根节点是不同类型的 NodeEditNodeConfig,它们都继承自相同的子类。

public abstract class NodeBase
{
string Name { get; set; }
...
}

public class NodeEdit : NodeBase ...
public class NodeConfig : NodeBase ...

对于容器,我也创建了一个基类并从中继承:

public abstract class ContainerBase
{
NodeBase Root { get; set; }
...
}

当通过从 ContainerBase 继承为 Editor- 和 Configuratorcontainer 创建类时,我想成为 Root 的类型 - 特定(从 NodeBase 继承)类型的属性,如:

public class ContainerEditor : ContainerBase
{
NodeEditor Root { get; set; }
...
}

但是我无法更改 ContainerBase 中定义的属性的类型。有没有办法解决这个问题?我可以使用 BaseNode 类型,并添加一个 NodeEditor 元素,例如

ContainerEditorInstance.Root = new NodeEditor();

因为NodeEditor类型继承自BaseEditor类型,但是在Container-Editor类中,我想明确地只允许Root-property的类型为NodeEditor。我可以在 setter 中检查它并拒绝除 NodeEditor 类型的节点之外的所有节点,但我希望该属性属于特定类型,这样我就可以在编译时检测到错误的分配。

提前致谢,
弗兰克

最佳答案

使用泛型:

public abstract class ContainerBase<T> where T:NodeBase
{
T Root { get; set; }
...
}

public class ContainerEditor : ContainerBase<NodeEditor>
{
...
}

关于c# - 更改继承属性的类型(到继承类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8007973/

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