【发布时间】:2017-05-27 14:31:29
【问题描述】:
我有两种类型的节点,一种是MyLinkNode,它用作base,另一种是GraphNode,它继承了MyLinkNode。
我尝试使用 MyLinkNode 创建 MyQueue。一切正常,直到我尝试将 GraphNode 添加到 MyQueue。我不能将 MyQueue 与 GraphNode 一起使用,因为它更大。
另一种方法是为 GraphNode 创建另一个队列,但这意味着如果我有更多类型的节点,我将需要创建很多类。 有什么建议吗?
public class MyQueue<T> where T : MyLinkNode<T>
{
private T Head;
private T Last;
public MyQueue(){ ... }
public void Enqueue(T item)
{
item.Prev = Last;
Last.Next = item;
Last = item;
}
}
public class MyGraphQueue
{
//everything is the same with MyQueue besides the Node Type
//I don't want to create like this.
private GraphNode Head;
private GraphNode Last;
public MyGraphQueue(){ ... }
public void Enqueue(GraphNode item)
{
item.Prev = Last;
Last.Next = item;
Last = item;
}
}
public class MyLinkNode<T>
{
public T data { get; set; }
public MyLinkNode<T> Next { get; set; }
public MyLinkNode<T> Prev { get; set; }
}
public class GraphNode<T> : MyLinkNode<T>
{
public GraphNode()
{
this.adjacencyNodes = new List<GraphNode<T>>();
this.isVisited = false;
}
public List<GraphNode<T>> adjacencyNodes;
public bool isVisited { get; set; }
}
public void BFS<T>(GraphNode<T> v)
{
MyQueue<GraphNode<T>> queue = new MyQueue<GraphNode<T>>(); // error, can't implicit convert GraphNode to MyLinkNode<T>
MyGraphQueue queue = new MyGraphQueue(); //It's how I do now.
}
【问题讨论】:
-
我不明白您所说的“不能将 MyQueue 与 GraphNode 一起使用,因为它更大。”
-
对不起,我的解释很糟糕。如果我将 MyQueue 与 GraphNode 一起使用,编译器会说这是非法的,因为 GraphNode 不能隐式转换为 MyLinkNode。
标签: c# inheritance data-structures generic-list