【发布时间】:2017-04-28 14:28:29
【问题描述】:
我读过很多关于如何拥有隐式 ctor 继承的问题,因此不必复制它们。
这个问题完全相反:为什么 C# 不再强迫我这样做了?我希望派生类被强制实现基构造函数……但它没有发生。我做错了什么?
基类
public abstract class LogicalDevice
{
private LogicalDevice()
{
}
protected LogicalDevice(string id)
{
}
}
中间派生类
public abstract class Device : LogicalDevice
{
public Device(string ID)
: base("ID")
{
}
public Device(ConfigurationData configuration)
: base(configuration["ID"])
{
}
}
最终派生类
internal class CoffeMachineDevice : Device
{
public CoffeMachineDevice (ConfigurationData configuration)
: base(configuration)
{
}
}
为什么类 CoffeMachineDevice 会编译?
【问题讨论】:
-
“为什么 C# 不再强迫我这样做” - 它从来没有/没有。要求是派生类中的每个构造函数都必须(直接或间接)调用基类中的 a 构造函数,但从来没有要求必须有(至少一个)构造函数调用 基础中的每个构造函数。
-
如果这是答案,请照此发布。
-
我有兴趣了解为什么人们相信关于编程语言的完全错误的事情。你能解释一下为什么你认为 C# 曾经有这个限制吗?
-
我也有兴趣了解您为什么要强制派生类做某事。基类的目的是为派生类的实现者提供服务,而不是要求他们编写他们不想写的代码。你能解释一下你在这里真正想要做什么吗?可能有更好的方法来完成它。
-
@EricLippert 一些基本的误解,也许吧?我的意思是,我从来没有遇到过 C# 和 OOP 的问题,我已经在许多不同的环境中使用 C# 编程了 10 年,而且一切都很好。那些日子我在玩设计,“向编译器扔代码”只是为了实验,我一定是从编译器错误消息中误解了一些东西,然后从那里完全误入歧途。
标签: c# inheritance constructor