0

子の追加と削除、親の処理、祖先や子孫の検索などのメソッドを備えた基本クラス Node を作成しました。

ここで、派生型 TreeNode を作成したいと思います: Node は、これらすべての Node 機能の恩恵を受けますが、同時に、子と親が同じ TreeNode 型を持つように制限します。今のところ、私はまだ子と親の型として Node を持っています。

Node クラスのプロパティとメソッドの引数の型を、手動でオーバーライドまたは「新規」にせずに、派生クラスの型と一致するように変更することはできますか?

class Node
{
  public TypeOfThisInstance Parent { get; }
}

class TreeNode : Node
{
}

TreeNode.ParentTreeNodeではなく である必要がありNodeます。

4

2 に答える 2

1

ジェネリックの使用:

public class BaseNode<T> where T : BaseNode<T>
{
  private T _parent;
  public T Parent { get { return _parent;} }
}
public class Node : BaseNode<Node>
{
} 
public class TreeNode : BaseNode<TreeNode>
{
}
于 2012-04-22T13:53:29.923 に答える
0

複合設計パターンを構築する必要があると思います。構造内の葉を枝 (複数の葉や他の枝を含むことができる下位構造) と同じ方法で処理できる、ツリーのような構造を作成することがすべてです。ここでの考え方は、生活を楽にするために、ツリー構造内の葉と葉の構成を同じように扱うことができるべきだということです。

于 2012-04-22T13:54:58.893 に答える