我已經編寫了一個模板化的digraph類(Graph<Generic>
)供Djikstra's在我正在進行的項目中使用。其中,它爲DataContainer
對象分配內存,該對象使用AdjacencyList
實例(實現IDataContainer
)進行初始化,以便跟蹤所有節點和邊緣。我還編寫了一個AdjacencyMatrix
類(它也實現了IDataContainer
),我希望在某些情況下可以動態使用它。如何判斷哪個類用於在C#中管理其數據?
現在我創建了一個有向圖通過以下調用:
Graph<string> graph = new Graph<string>();
而在我的圖表,我創建了我的數據容器:
IDataContainer<Generic> data;
public Graph()
{
data = new AdjacencyList<Generic>();
}
理想情況下,我想傳遞我想要使用的數據結構(列表與矩陣),當我打電話給構造函數,如:
Graph<AdjacencyMatrix, string> graph = new Graph<AdjacencyMatrix, string>();
但我不是qui確定如何通過模板化的類型。我能以這樣的方式模板它允許調用,比如:
Graph<AdjacencyList<string>, string> graph = new Graph<AdjacencyList<string>, string>();
但是,當我走在類來創建鄰接表(其中public class Graph<Container, Generic> where Container : new()
與按http://msdn.microsoft.com/en-us/library/x3y47hd4(v=vs.80).aspx where子句)有:
data = new Container();
我得到的錯誤:
Cannot implicitly convert type 'Container' to 'GraphDataContainer<Generic>'. An explicit conversion exists (are you missing a cast?)
我很可能包括就解決了錯誤的類型轉換含蓄,但我認爲這樣的事實,在有錯誤所有在試圖創建實例時(將子類傳遞給GraphDataContainer時)都表明這裏還有其他錯誤。它是我的繼承,還是它在混亂的構造函數調用中令人費解的事情(如果你能想到一個更乾淨的方法,會非常感激!)?
有沒有辦法告訴一個類,當它最初被構造時使用哪個類來管理它的數據?
太棒了。謝謝!小編輯:'new()'必須是where子句後面列出的最後一個東西,所以它應該是'Where Container:DataContainer,new()'。 – drusepth