C#で型保護されたツリーの実装を実装するために/ tringを探しています。のC#で型安全なツリーの実装(型保証されたノード)
インターフェイスを使用せずにタイプセーフなツリーを実装するにはどうすればいいですか(キャストを使わずにツリー機能を全面的に再実装する必要があります)?
私はツリーを共通の基底クラスとして使用する考えがありますが、型の安全はなくなりました。私の現在のアプローチは、使用法ジェネリックスです。しかし、私はベースタイプに戻っていくつかの変換が欠けている。
以下は、縮小/非動作の例です。 考えられるのは、返されたノードがツリー関数をサポートしていると同時に、それらが基本型の動作をサポートしているということです。 Nodeクラスを継承しないで、以下のクラスを使用することもできますが、一方で型の安全性を失い、継承に問題が発生します。
私もクラス拡張でうんざりしていましたが、可能な解決策に近いものはありませんでした。
私は、どのように続けるかについての小さなヒントが必要だと思います。前もって感謝します。
public class Node<T> // .
{
public Node<T> parent;
public List<Node<T>> children;
protected Node()
{
children = new List<Node<T>>();
parent = null;
}
protected Node(Node<T> parent)
: this()
{
this.parent = parent;
parent.addChildren(this);
}
protected void addChildren(Node<T> child)
{
children.Add(child);
}
public Node<T> getRoot() // returns root node
public List<Node<T>> flatten() // return 1d-list of all nodes.
}
Tのタイプはツリー内のノードごとに異なることはありますか?それとも、それは木全体で常に同じでしょうか? – Soukai
いいえ(サブクラスのみ)。しかし、私は別のTのために同じツリーの実装を使用したいと思います。 – James