基类中的派生实例

Dee*_*Raj 4 .net c# polymorphism inheritance

class baseClass
{
    derivedClass nm = new derivedClass();
}

class derivedClass : baseClass
{
}
Run Code Online (Sandbox Code Playgroud)

这段代码很好.可能是C#允许在其中创建derivedClass对象的可能原因baseClass.你能想到这样做的具体原因吗?

Jon*_*eet 12

这段代码很好.

是的 - 为什么你认为不会?

C#允许在baseClass中创建derivedClass对象的可能原因是什么.

因为没有理由禁止它吗?

你能想到这样做的具体原因吗?

例如,静态工厂方法?

// BaseClass gets to decide which concrete class to return
public static BaseClass GetInstance()
{
    return new DerivedClass();
}
Run Code Online (Sandbox Code Playgroud)

这实际上是一种非常常见的模式.我们在Noda TimeCalendarSystem经常使用它,例如,它是一个公共抽象类,但所有具体的派生类都是内部的.

当然,拥有你给出的确切示例是很疯狂的 - 实例字段通过创建派生类的实例来初始化自己 - 因为它会因递归而炸毁堆栈 - 但这不是它是派生的问题类.你可以通过初始化同一个类来获得相同的东西:

class Bang
{
    // Recursively call constructor until the stack overflows.
    Bang bang = new Bang();
}
Run Code Online (Sandbox Code Playgroud)