【问题标题】:C#: force constructor inheritanceC#:强制构造函数继承
【发布时间】: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


【解决方案1】:

C# 要求派生类中的每个构造函数都必须调用基类中的构造函数。但是没有要求必须调用基类的每个构造函数。 这就是 CoffeMachineDevice 编译的原因。

【讨论】:

    猜你喜欢
    • 2019-01-12
    • 2014-06-15
    • 2019-01-21
    • 2012-11-14
    • 2012-09-20
    • 1970-01-01
    • 2021-06-24
    • 2015-03-24
    • 2014-08-21
    相关资源
    最近更新 更多