2017-03-16 83 views
0

这个常见错误有很多答案,但我看过的答案并没有解决这个具体问题。 我有以下继承;类有错误“没有任何参数对应于所需的

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) 

要修复它VS表明下面的构造以下;

public C(string id, string name, JObject parameters): 
     base(id, name, parameters) { } 

为什么C构造函数需要将所有值传递给B?我会想如果我没有重写继承的构造函数,我不必再次定义它。 如果一个类没有定义构造函数,则假定存在一个无参数的构造函数。然而,如果它从具有参数化构造函数的类继承,那么不应该这样做吗?

+0

构造函数是不是在C#继承 – DavidG

+0

你的问题正是与标记的副本相同。只需用'B'替换'C',用'A'替换'B'。你的'C'试图调用'B'中唯一的构造函数,它需要一个'id'(和'name'和'parameters'),但是'C'没有提供''''。因此错误。你必须传递值,或者在'B'中放置一个无参数的构造函数(如标记的副本所述)。 –

+0

@PeterDuniho谢谢。我没有意识到C会有一个隐含的无参构造函数,我认为它会默认为基类的构造函数签名。但是现在我意识到从多个基地继承时不起作用。我如何标记这适用于审核?我无法用答案将其删除。 –

回答

1

B只有一个构造函数,它有三个参数。 C目前正在使用其默认的构造函数(它不会奇迹般地获得B的构造函数),它可以被明确写入:

public C(): base() 
{ } 

然而,基类的构造不存在。至少,你需要使用正确的基础构造(现在需要你定义它):

public C(): base(id, name, parameters) 
{ } 

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

0

参考回到类构造函数为你调用B类的基类的构造,这显然不符合构造函数的参数为​​A类

相关问题