【发布时间】:2014-06-10 10:17:43
【问题描述】:
我对一个类有以下定义(我正在使用图表,尝试以通用方式使用它们)。
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 的签名减少为“公共类 PathFinder”之类的东西?
【问题讨论】:
-
附带说明,根据C# naming convention,您的泛型类型参数应称为
TNode和TEdge,而不是NodeType和EdgeType。 -
如果您的目标只是尽量减少必须阅读和输入的代码量,您还可以考虑使用“using”指令来创建别名:msdn.microsoft.com/en-us/library/sf0df423.aspx