gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:05:37 24 4
gpt4 key购买 nike

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

这是我的代码:

// 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/22857781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com