タイトルの通りですが、可能かどうか知りたいです。
同じデータ構造内の別のノードを指すノード クラスがあります。
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
ますか? キャストを行う必要なく、一般的なデータ構造を実装できるようにしたいと考えています。出来ますか?劣った設計パターンを使用していませんか?