c#的继承问题
本文关键字:问题 继承 | 更新日期: 2023-09-27 18:09:37
我的应用程序中有一个关于继承的小问题。我有一个基类Client,它有一个子类Job。基本上,我试图创建一个构造函数的工作,但我得到一个错误说"'Job_Manager_Application。客户端"不包含接受0个参数的构造函数"
不明白它为什么这样做?
你的Client类有一个带参数的构造函数。
因此,您的作业构造函数需要将参数传递给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.
}
}
为什么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.Client(string)
。如果没有显式指定基构造函数,编译器会尝试找到一个可访问的无参数构造函数。如果没有,您将得到您所遇到的编译时错误。
Client
添加一个无参数构造函数。
但是请重新考虑你的模型。Job
不是Client
客户端有一个接受参数的构造函数,而你没有正确调用它
public class Job
{
public Job(int num) { }
}
public class Client : Job
{
public Client() : base(1) {}
}