我有一个名为Node的基类派生类,它构成了Graph的元素。 我想定义一个只能存储DerivedNodes的DerivedGraph,并且可能有一些DerivedNode特定的方法。节点必须在两个类中都是可变的。
处理此问题的标准做法是什么? 显然要避免复制数据成员。 是否应该通过类型检查和在属性中进行转换来完成?
public class Node {}
public class DerivedNode : public Node {}
public class Graph
{
private List<Node> nodes;
//some code
}
class DerivedGraph : Graph {}
编辑:
我应该添加我需要Graph可以包含Nodes和DerivedNodes的功能
答案 0 :(得分:2)
我建议使用Generics来解决这个问题。
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
。
答案 1 :(得分:0)
也许为Graph创建一个通用的Graph和扩展方法,其中T:DerivedNode?注意:刚进入我的脑海,还没有完成。但这可以起作用并保持代码清洁。
你可以让Graph通用并从Graph继承。所以你不会为扩展方法而烦恼
答案 2 :(得分:0)
正确的方法是使用通用的Graph
类,然后添加constraints on its typed parameter以确保它是Node
或派生自Node
:< / p>
public class Node {}
public class DerivedNode : Node {}
public class Graph<T : Node> // <<===
{
private List<T> nodes;
//some code
}
class DerivedGraph : Graph<DerivedNode> {}
答案 3 :(得分:0)
你可以用仿制品;
之类的东西public class Graph<T> where T : Node
{
private List<T> nodes;
//some code
}
class DerivedGraph : Graph<DerivedNode> {}
答案 4 :(得分:0)
使用泛型:
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>
{
}