我如何在我的基础 class 中使用泛型类型?
How do i use generic type in my base class?
我有一个 class 结构,其基础抽象 class 具有派生的 classes。
我的基地class是这样的:
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 个派生的 classes:
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>();
}
}
但我似乎不能像这样为我的图表做灵活的类型。这里的想法是创建一个图表,让我可以为其节点使用不同的对象。无论是路点图还是基于图块的图。
但我正在努力研究如何获得它的灵活性,以允许我在创建每个新图形时更改类型。
我走的方向对吗?我怎样才能在我的列表中获得类型灵活性?
你快到了;你只是遗漏了一些关键部分:
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()
;编译器为您完成
我有一个 class 结构,其基础抽象 class 具有派生的 classes。
我的基地class是这样的:
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 个派生的 classes:
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>();
}
}
但我似乎不能像这样为我的图表做灵活的类型。这里的想法是创建一个图表,让我可以为其节点使用不同的对象。无论是路点图还是基于图块的图。
但我正在努力研究如何获得它的灵活性,以允许我在创建每个新图形时更改类型。
我走的方向对吗?我怎样才能在我的列表中获得类型灵活性?
你快到了;你只是遗漏了一些关键部分:
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()
;编译器为您完成