我如何在我的基类中使用泛型类型?

时间:2017-05-22 05:33:15

标签: c# .net-2.0

我有一个带有派生类的基本抽象类的类结构。

我的基类看起来像这样:

public abstract class Graph
{
    public Dictionary<Vector3, int> Dictionary { private set; get; }
    public List<T> List { set; get; }

    public Graph()
    {
         Dictionary = new Dictionary<Vector3,int>();
    }
}

然后我有2个派生类:

public class Graph_Waypoints : Graph
{
    public Graph_Waypoints() : base ()
    {
         List = new List<Waypoint>();
    }
}
public class Graph_Tiles : Graph
{
    public Graph_Tiles() : base ()
    {
         List = new List<Tile>();
    }
}

但似乎我不能像这样为我的图表做灵活的类型。这里的想法是创建一个图表,让我为其节点使用不同的对象。无论是路点图还是基于图块的图。

但我正在努力研究如何获得灵活性,以便在创建每个新图时允许我更改类型。

我在这里朝着正确的方向前进吗?如何在列表中获得类型灵活性?

1 个答案:

答案 0 :(得分:4)

你几乎就在那里;你只是遗漏了一些关键部分:

public abstract class Graph<T> // <-- Graph must be generic
{
    public Dictionary<Vector3, int> Dictionary { private set; get; }
    public List<T> List { set; get; }

    public Graph()
    {
        Dictionary = new Dictionary<Vector3, int>();
        // You could initialize the list as you did before, but it's cleaner to do it here
        List = new List<T>();
    }
}

public class Graph_Waypoints : Graph<Waypoint> // <-- Subclasses must provide the base class generic arguments
{
    public Graph_Waypoints() : base()
    {
    }
}
public class Graph_Tiles : Graph<Tile>
{
    public Graph_Tiles() : base()
    {
    }
}

另请注意,在实现无参数构造函数时,不需要显式写: base();编译器为你做了