我有一个带有派生类的基本抽象类的类结构。
我的基类看起来像这样:
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>();
}
}
但似乎我不能像这样为我的图表做灵活的类型。这里的想法是创建一个图表,让我为其节点使用不同的对象。无论是路点图还是基于图块的图。
但我正在努力研究如何获得灵活性,以便在创建每个新图时允许我更改类型。
我在这里朝着正确的方向前进吗?如何在列表中获得类型灵活性?
答案 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()
;编译器为你做了