class baseClass
{
derivedClass nm = new derivedClass();
}
class derivedClass : baseClass
{
}
此代码构建良好。C# 允许derivedClass
在baseClass
. 你能想到这样做的任何具体原因吗?
class baseClass
{
derivedClass nm = new derivedClass();
}
class derivedClass : baseClass
{
}
此代码构建良好。C# 允许derivedClass
在baseClass
. 你能想到这样做的任何具体原因吗?
此代码构建良好。
是的 - 为什么你认为它不会?
C# 允许在 baseClass 中创建派生类对象的可能原因是什么。
因为没有理由禁止它?
你能想到这样做的任何具体原因吗?
例如静态工厂方法?
// BaseClass gets to decide which concrete class to return
public static BaseClass GetInstance()
{
return new DerivedClass();
}
这实际上是一个很常见的模式。我们在野田时代经常使用它,例如,哪里CalendarSystem
是公共抽象类,但所有具体派生类都是内部的。
当然,拥有您给出的确切示例真是太疯狂了-实例字段通过创建派生类的实例来初始化自身-因为它会由于递归而炸毁堆栈-但这与派生无关班级。通过初始化同一个类,你会得到同样的结果:
class Bang
{
// Recursively call constructor until the stack overflows.
Bang bang = new Bang();
}
我曾经合作过的一位开发人员在我们的代码库中生成了这段代码。我个人同意它很有用。
public class Foo
{
public static Foo MagicalFooValue
{
get { return Bar.Instance; }
}
private class Bar : Foo
{
//Implemented as a private singleton
}
}
一个明显的情况是在基类中有一个工厂方法,它会根据某些条件返回适当的实现。
derivedClass
可以实例化,baseClass
因为它是一个可访问的类。c# 没有理由限制你这样做。baseClass
同样,您可以在其内部创建一个实例baseClass
。