我有一個類的以下定義(我正在處理圖形,試圖以通用方式與它們一起工作)。如何正確地做一個模板類的模板?
public class SparseGraph<NodeType, EdgeType> : IGraphType<NodeType, EdgeType>
where NodeType : INode
where EdgeType : IEdge
{
...
}
public class ConcreteNode : INode
{
...
}
public class ConcreteEdge : IEdge
{
...
}
public class PathFinder<GraphType, NodeType, EdgeType> where GraphType<NodeType, EdgeType> : IGraphType<NodeType, EdgeType>
where NodeType : INode
where EdgeType : IEdge
{
...
...
}
我每次都要來實例化路徑查找器類,即用於SparseGraph,我必須使用下面的聲明來做到這一點:
var a = new PathFinder<SparseGraph<ConcreteNode, ConcreteEdge>, ConcreteNode, ConcreteEdge>()
探路類有一個模板的模板。就我個人而言,我不喜歡這種類型實例化的「冗餘」。有什麼辦法可以將類路徑查找器的簽名減少爲「公共類路徑查找器」?
作爲一個方面說明的情況下,實施更具體的子類型爲每個正在使用的常見的情況,例如,根據[ C#命名約定](http://msdn.microsoft.com/en-us/library/aa479858.aspx#bestpractices_topic2),應將泛型類型參數稱爲「TNode」和「TEdge」,而不是「NodeType」和「EdgeType '。 – dcastro
如果您的目標只是儘量減少必須閱讀和鍵入的代碼量,您還可以考慮使用「using」指令來創建別名:http://msdn.microsoft.com/zh-cn/library/sf0df423 .aspx – ilitirit