我有一个名为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> {}
这将允许您在实例化类时指定Node
或DerivedNode
。
也许可以为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>
{
}