c# - 继承一个没有任何构造函数的抽象类

标签 c# inheritance constructor abstract-class

我想从另一个类继承一个类,标记为抽象类,没有定义任何构造函数。

这是我的代码:

// In one assembly (TheMessage.dll), as seen via F12 in VS (from Metadata)
namespace Namespace1 
{
    public abstract class Message
    {
       public string Body { get; set; }
       // some abstract methods here, not shown.
    }
}

// In another assembly (TheUser.dll)
namespace Namespace2
{
    public class MyMessage : Namespace1.Message
    {
         public MyMessage()
         {
         }
    }
}

问题是在 public MyMessage() 构造函数上我得到了错误

The type 'Namespace1.Message' has no constructors defined

我在 MSDN 站点(abstract (C# Reference) 第一个示例)上看到可以在没有构造函数的情况下继承抽象类。那么,有人知道为什么我会收到此错误吗?

请注意,当类型与 Message 类位于同一 DLL 中时,它可以很好地继承,并且它的工作原理是该程序集公开了一些派生自 Namespace1.Message 的其他类型,类似于以下内容:

// The same assembly  as Message (TheMessage.dll), as seen via F12 in VS (from Metadata)
namespace Namespace3
{
    public class Message : Namespace1.Message
    {
        public Message() {}
        public Message(string to) {}
    }
}

我还检查了 The type '...' has no constructors defined ,但它并没有谈到继承,而只是新建一个实例,我显然不希望直接实例化一个抽象类的实例。

最佳答案

您可能有一个内部构造函数(未在您发布的代码中显示)并尝试使用来自不同程序集的内部构造函数实例化该类。

(如果您没有显式指定要调用的基类构造函数,则基类的默认构造函数会自动从派生类调用,因此您可能不会很明显地知道正在调用基类构造函数。)

例如,如果一个程序集包含此类(在命名空间 ClassLibrary1 内):

public class Base
{
    internal Base()
    {
    }
}

不同的程序集执行此操作:

class Derived: Base
{
    public Derived()
    {
    }
}

您将看到以下编译错误:

“ClassLibrary1.Base”类型没有定义构造函数

关于c# - 继承一个没有任何构造函数的抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57544131/

相关文章:

java - 在重写的父类(super class)方法中访问子类属性。可能的?

python - 扩展 Python 的内置 Str

java - 将继承参数从父类(super class)更改为子类

c++ - 如果我传递临时引用并将其存储为类成员会怎样?

c# - Prism 区域 View 按需显示,如何在事件 View 中刷新控件

c# - 如何拥有一个全局列表?

c# - C# 循环问题中的刽子手

c# - 如何更改 Winforms 按钮上第二行文本的字体大小和颜色?

css - 根据图像宽度调整div

Java - 子类调用 super 构造函数,它调用子类方法而不是它自己的方法