【发布时间】:2013-07-25 22:22:54
【问题描述】:
正如标题所说,我想知道是否可能。
我有一个节点类指向同一数据结构中的另一个节点。
class DataStructure<T, N>
where T : IComparable<T>
where N : Node<T> {
N RootNode;
// More code to follow, etc.
}
class Node<T>
where T : IComparable<T> {
T value;
Node<T> NextNode;
Node<T> GetLastNode() {
Node<T> current = this;
while (this.NextNode != null) {
current = current.NextNode;
}
return current;
}
// etc.
}
我希望能够扩展 Node 类,以便获得有关 DataStructure 的某些通用版本的更多信息。例如:
class AdvancedNode<T> : Node<T>
where T : IComparable<T> {
int Height;
int Size;
// etc.
}
问题是当我尝试关注NextNode 链接时。
DataStructure<char, AdvancedNode<char>> d = new DataStructure<char, AdvancedNode<char>>();
d.RootNode = new AdvancedNode<char>();
d.RootNode.NextNode = new AdvancedNode<char>();
AdvancedNode<char> y = d.RootNode.NextNode; // TYPE ERROR! Will not compile
另外,我想让它不可能做这样的事情:
DataStructure<char, AdvancedNode<char>> d = new DataStructure<char, AdvancedNode<char>>();
d.RootNode = new AdvancedNode<char>();
d.RootNode.NextNode = new Node<char>(); // This will compile,
// but I don't want it to!
有没有办法在构建时强制Node.NextNode 与this 的类型相同?我希望能够实现通用数据结构而无需进行强制转换。是否可以?我使用的是劣质设计模式吗?
【问题讨论】:
-
我认为这是*.com/questions/1327568/… 和Curiously recurring template pattern 上的其他主题的重复。
-
您错过了向我们提供示例中使用的非通用
AdvancedNode的定义.. -
@KenKin 没有非泛型 AdvancedNode(据我所知,该类型是从其他类型参数推断出来的)
-
@KenKin 将其更改为 DataStructure
> 更清楚。 -
@Curtor:我猜你要实现的就像LinkedListNode<T>。
标签: c# inheritance data-structures types