class baseClass
{
derivedClass nm = new derivedClass();
}
class derivedClass : baseClass
{
}
此代码构建良好。 C# 允许在 baseClass
中创建 derivedClass
对象的可能原因是什么。您能想到这样做的任何具体原因吗?
最佳答案
This code builds fine.
是的 - 为什么你认为它不会?
What might be the possible reason for C# to allow creating derivedClass objects in baseClass.
因为没有理由禁止它?
Can you think of any specific reasons for doing this?
例如静态工厂方法?
// BaseClass gets to decide which concrete class to return
public static BaseClass GetInstance()
{
return new DerivedClass();
}
这实际上是一种很常见的模式。我们在 Noda Time 中经常使用它例如,其中 CalendarSystem
是公共(public)抽象类,但所有具体派生类都是内部的。
当然,拥有您给出的确切示例是疯狂的 - 实例字段通过创建派生类的实例来初始化自身 - 因为它会由于递归而炸毁堆栈 - 但这不是问题作为派生类。通过初始化相同类,您会得到相同的结果:
class Bang
{
// Recursively call constructor until the stack overflows.
Bang bang = new Bang();
}
关于c# - 基类中的派生实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15106178/