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 回答