私は2つのタイプのノードを持っています.1つはMyLinkNodeです。これはベースとして使用され、もう1つはMyLinkNodeを継承するGraphNodeです。C#generic、ここでTクラス:(継承クラス)
MyLinkNodeを使用してMyQueueを作成しようとしています。 GraphNodeをMyQueueに追加しようとするまでは、すべて問題ありません。 GraphNodeでMyQueueを使用することはできません。
別の方法は、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.
}
"私はGraphNodeでMyQueueを使うことができないので、意味が分かりません。 –
申し訳ありませんが私の貧しい人々の説明です。 GraphNodeでMyQueueを使用すると、GraphNodeは暗黙的にMyLinkNodeに変換できないため、コンパイラはそれが不正だと言うでしょう。 –