用泛型来考虑这个声明:
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
我是否创建了一个不可实例化的类?它可以通过反射初始化吗?
答案 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>();