我对一个类有以下定义(我正在处理图表,试图以通用方式处理它们)。
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 类有一个模板的模板。我个人不喜欢这种类型实例化的这种“冗余”。有什么方法可以将 PathFinder 类的签名减少为类似“public class PathFinder”的东西吗?
最佳答案
就我个人而言,我会为您使用的每个常见情况实现更具体的子类型,例如“SparseGraph”
public class SparseGraphPathFinder : PathFinder<SparseGraph<ConcreteNode, ConcreteEdge>, ConcreteNode, ConcreteEdge>
{
}
关于c# - 如何正确地做模板类的模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24138441/