处理派生类中派生成员的标准实施规程

本文关键字:派生 施规程 规程 标准 成员 处理 | 更新日期: 2023-09-27 18:28:53

我有一个名为Node的基类和派生类,它构成了Graph的元素。我想定义一个DerivedGraph,它只能存储DerivedNodes,并且可能有一些特定于DerivedNode的方法。两个类中的节点都必须是可变的。

处理此问题的标准做法是什么?显然应避免重复数据成员。是否应在性能范围内通过类型检查和铸造来完成?

public class Node {}
public class DerivedNode : public Node {}
public class Graph 
{
    private List<Node> nodes;
    //some code
}
class DerivedGraph : Graph {}

编辑:

我应该补充一点,我需要Graph可以同时包含Nodes和DerivedNodes 的功能

处理派生类中派生成员的标准实施规程

我建议使用泛型来解决这个问题。

public class Node {}
public class DerivedNode : public Node {}
public class Graph<T> where T : Node
{
    private List<T> nodes;
    //some code
}
class DerivedGraph : Graph<DerivedNode> {}

这将允许您在实例化类时指定NodeDerivedNode

也许可以为Graph制作一个通用的Graph和扩展方法,其中T:DerivedNode?注意:我刚想到,还没有做这个。但这可以起作用,并保持代码的整洁。

您可以将Graph设为泛型并从Graph继承。因此,您不会遇到扩展方法

的麻烦

正确的方法是使用通用Graph类,然后在其类型化参数上添加约束,以确保它是Node或从Node:派生

public class Node {}
public class DerivedNode :  Node {}
public class Graph<T : Node>  // <<===
{
    private List<T> nodes;
    //some code
}
class DerivedGraph : Graph<DerivedNode> {}

您可以使用泛型;类似的东西

public class Graph<T> where T : Node 
{
    private List<T> nodes;
    //some code
}
class DerivedGraph : Graph<DerivedNode> {}

使用泛型:

public class Node
{
}
public class DerivedNode : Node
{
}
public class Graph<T>
    where T : Node
{
    private List<T> nodes;
    //some code
}
public class DerivedGraph : Graph<DerivedNode>
{
}