c# - 基类中的派生实例

标签 c# .net inheritance polymorphism

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/

相关文章:

c# - Moq - 设置 .Equals 方法返回 false

.NET 3.5 Web 应用程序 - C# 图像动态缩放 - 部署站点的质量低于开发

java - java中的父/子构造函数

inheritance - Go - 如何明确声明一个结构正在实现一个接口(interface)?

c# - 如何在低版本(.Net)上使用Excel Interop?

c# - .NET 的离散事件模拟框架

c# - SQLDataReader 运行速度太慢取决于标准

c# - Azure BlobStorage 流对大于 25 MB 的文件关闭

.net - HttpUtility.UrlEncode是否符合 'x-www-form-urlencoded'的规范?

c# - 如何以通用类型安全的方式验证层次结构中的类?