我该如何实例化这个类?

时间:2012-07-02 18:03:18

标签: c# instantiation

用泛型来考虑这个声明:

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

我是否创建了一个不可实例化的类?它可以通过反射初始化吗?

2 个答案:

答案 0 :(得分:5)

你可以实例化那个怪物。您所要做的就是创建自己的类,该类继承自Node

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

然后你可以像这样实例化它:

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

为什么你想要这样做,完全是另一回事......

答案 1 :(得分:1)

添加静态工厂方法:

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

如此称呼它:

var foo = BaseNode<Node>.Create<Node>();