C# 类有错误“;没有给出与所需参数相对应的参数

C# 类有错误“;没有给出与所需参数相对应的参数,c#,C#,对于这个常见的错误有很多答案,但我所看到的答案并不能解决这个特定的问题。 我有以下遗产 public class C : B { } public abstract class B : A { public B(string id, string name, JObject parameters) : base(parameters) { } } 我收到的错误是 CS7036 C# There is no argument given that correspond

对于这个常见的错误有很多答案,但我所看到的答案并不能解决这个特定的问题。 我有以下遗产

public class C : B
{
}

public abstract class B : A
{
    public B(string id, string name, JObject parameters) : base(parameters)
    {
    }
}
我收到的错误是

CS7036  C# There is no argument given that corresponds to the required formal parameter 'id' of B.B(String, String, JObject)
要修复它,建议使用以下构造函数

public C(string id, string name, JObject parameters):
        base(id, name, parameters) { }
为什么C构造函数只需要将值传递给B?我会认为,如果我没有重写继承的构造函数,我就不必再次定义它。 如果一个类没有定义构造函数,则假定存在一个参数小于1的构造函数。但是,如果它继承自一个具有参数化构造函数的类,那么这不应该是假设吗?

B
只有一个构造函数,即一个包含三个参数的构造函数
C
当前正在使用其默认构造函数(它不会神奇地获得
B
的构造函数),可以显式编写:

public C(): base()
{ }
但是,该基本构造函数不存在。至少您需要使用正确的基本构造函数(现在需要您定义它):

除非现在您使用的是未声明的变量。您可以只传递这些参数的默认值,但VS会将它们放在C的参数列表中

B
只有一个构造函数,一个接受三个参数的构造函数
C
当前正在使用其默认构造函数(它不会神奇地获得
B
的构造函数),可以显式编写:

public C(): base()
{ }
但是,该基本构造函数不存在。至少您需要使用正确的基本构造函数(现在需要您定义它):


除非现在您使用的是未声明的变量。您可以只传递这些参数的默认值,但VS会将它们放在C的参数列表中

在调用B类上的基本构造函数时,请返回到A类构造函数,该类构造函数显然与A类的构造函数参数不匹配

在调用B类上的基本构造函数时,请返回到A类构造函数,该类构造函数显然与A类的构造函数参数不匹配类

构造函数不是在C中继承的,您的问题与标记的重复项完全相同。只需将
C
替换为
B
,将
B
替换为
A
。您的
C
正在尝试调用
B
中唯一的构造函数,该构造函数需要
id
(和
name
parameters
),但您的
C
没有提供构造函数。因此出现了错误。您必须传递值,或者在
B
中放入无参数构造函数(如标记的副本中所述)。@PeterDuniho谢谢。我没有意识到C会有一个隐式的无参数构造函数,我认为它会默认为基类的构造函数签名。但现在我意识到,当从多个基继承时,这是行不通的。我如何将此标记为适度?我无法将其与答案一起删除。似乎有其他方法可以删除您的问题。但是如果你不想,你不需要。有时候,拥有一个副本对网站很有帮助。如果你仍然想删除它,只需点击文章底部的标志链接。提交自定义标志。具体说明你希望主持人做什么。构造函数在C#中不是继承的,你的问题与标记的重复完全相同。只需将
C
替换为
B
,将
B
替换为
A
。您的
C
正在尝试调用
B
中唯一的构造函数,该构造函数需要
id
(和
name
parameters
),但您的
C
没有提供构造函数。因此出现了错误。您必须传递值,或者在
B
中放入无参数构造函数(如标记的副本中所述)。@PeterDuniho谢谢。我没有意识到C会有一个隐式的无参数构造函数,我认为它会默认为基类的构造函数签名。但现在我意识到,当从多个基继承时,这是行不通的。我如何将此标记为适度?我无法将其与答案一起删除。似乎有其他方法可以删除您的问题。但是如果你不想,你不需要。有时候,拥有一个副本对网站很有帮助。如果你仍然想删除它,只需点击文章底部的标志链接。提交自定义标志。具体说明你希望主持人做什么。