处理派生类中派生成员的标准做法

时间:2012-03-22 15:28:08

标签: c# properties derived-class

我有一个名为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的功能

5 个答案:

答案 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> {}

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

答案 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>
{
}