我对一个类有以下定义(我使用图表,试图以通用方式使用它们)。
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
{
...
...
}
每次我必须实例化PathFinder类,即SparseGraph时,我必须使用以下声明来实现:
var a = new PathFinder<SparseGraph<ConcreteNode, ConcreteEdge>, ConcreteNode, ConcreteEdge>()
PathFinder类具有模板的模板。就个人而言,我不喜欢这种&#34;冗余&#34;在这种类型的实例化。有没有办法将类PathFinder的签名减少到&#34; public class PathFinder&#34;?
答案 0 :(得分:2)
继承自
PathFinder<SparseGraph<ConcreteNode, ConcreteEdge>, ConcreteNode, ConcreteEdge>
即
public class NewClass : PathFinder<SparseGraph<ConcreteNode, ConcreteEdge>, ConcreteNode, ConcreteEdge>
答案 1 :(得分:2)
我个人会为你正在使用的每个常见案例实现更具体的子类型,例如在&#34; SparseGraph&#34;
的情况下public class SparseGraphPathFinder : PathFinder<SparseGraph<ConcreteNode, ConcreteEdge>, ConcreteNode, ConcreteEdge>
{
}