4

ジェネリックスでこの宣言を検討してください。

public class BaseNode<TNode> where TNode : BaseNode<TNode>
{
    public class Node : BaseNode<Node>
    {
        public Node() { }
    }
}

Node基本クラスの外部からクラスのインスタンスを作成する方法はありますか?私は以前にこのパターンを使用しましたが、常に派生クラスを基本クラスの外に残します。

コンパイラエラーなしで次のように書くにはどうすればよいですか?

var obj = new BaseNode<Node>.Node(); 
// error CS0246: The type or namespace name 'Node' could not be found

インスタンス化できないクラスを作成しましたか?リフレクションで初期化できますか?

4

2 に答える 2

5

そのモンスターをインスタンス化できます。あなたがしなければならないのは、から継承するあなた自身のクラスを作成することですNode

public class MyNode : BaseNode<MyNode>.Node
{
}

次に、次のようにインスタンス化できます。

BaseNode<MyNode> obj = new BaseNode<MyNode>();

しかし、なぜこれをやりたいのかはまったく別の問題です...

于 2012-07-02T18:10:42.333 に答える
1

静的ファクトリメソッドを追加します。

public static Node Create<T>()
{
    return // your new Node
}

そしてそれをこう呼んでください:

var foo = BaseNode<Node>.Create<Node>();
于 2012-07-02T18:10:49.077 に答える