C# 如何在基类中使用泛型类型?

C# 如何在基类中使用泛型类型?,c#,.net-2.0,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<Vector

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

我的基类如下所示:

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>();
    }
}
公共抽象类图
{
公共字典字典{private set;get;}
公共列表{set;get;}
公共图()
{
字典=新字典();
}
}
然后我有两个派生类:

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>();
    }
}
公共类图形\u航路点:图形
{
公共图_航路点():基准()
{
列表=新列表();
}
}
公共类图\u Tiles:图
{
公共图_Tiles():基()
{
列表=新列表();
}
}
但我似乎不能像这样为我的图形创建灵活的类型。这里的想法是创建一个图形,让我为其节点使用不同的对象。无论是路径点图还是基于平铺的图

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


我走的方向对吗?我如何才能在列表中获得类型灵活性?

你就快到了;您只是缺少一些关键部分:

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()
    {
    }
}

公共抽象类图//您就快到了;您只是缺少一些关键部分:

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()
    {
    }
}

公共抽象类图//啊谢谢!现在我明白了这一切是如何联系在一起的!啊,谢谢!!现在我明白了这一切是如何联系在一起的!