我的应用程序中存在继承的小问题。我有一个基类Client,它有一个子类Job。基本上,我正在尝试为Job创建一个构造函数,但我收到一条错误,说''Job_Manager_Application.Client'不包含带0参数的构造函数“
无法弄清楚为什么会这样做?
提前致谢。
答案 0 :(得分:3)
您的Client类有一个带参数的构造函数。
因此,您的Job构造函数需要将参数传递给Client。
示例:
class Client{
public string Name {get;set;}
public Client(string name){
this.Name = name;
}
}
-
class Job:Client{
public double Rate {get;set;}
public Job(double rate){
// This won't compile, because Client won't have its "name" parameter.
}
public Job(string name, double rate) : base(name){
// So you need to pass a parameter from your Job constructor using "base" keyword.
this.Rate = rate;
}
public Job(double rate) : base("Default Name"){
// You could do this, this is legal.
}
}
答案 1 :(得分:2)
为什么Job
是Client
的子类?继承表示是关系(Cat
是 Animal
所以class Cat : Animal { }
)。 Job
不 Client
。
无论如何,您的错误消息是清楚的。您在Client
上没有可访问无参数构造函数。您需要在Job
上的构造函数中显式调用客户端上的构造函数。
class Client {
public string Name { get; set; }
public Client(string name) { this.Name = name; }
}
class Job : Client {
public Job(string name) : base(name) { }
}
在那里看到base(name)
?这是在Client.Client(string)
上调用基础构造函数Client
。如果未明确指定基础构造函数,编译器将尝试查找可访问无参数构造函数。如果没有,则会遇到您遇到的编译时错误。
所以,你要么像我上面那样做,要么显式地调用可访问的非无参数构造函数,要么将无参数构造函数添加到Client
。
但请重新考虑你的模特。 Job
不是Client
。
答案 2 :(得分:1)
客户端有一个带参数的构造函数,而你没有正确调用它
public class Job
{
public Job(int num) { }
}
public class Client : Job
{
public Client() : base(1) {}
}