我在应用程序中遇到了继承问题。我有一个基类Client,它有一个子类Job。基本上,我试图创建一个Job的构造函数,但我得到一个错误,说''Job_Manager_Application.Client'不包含一个构造函数,它需要0个参数“继承问题C#
不知道为什么它这样做?
在此先感谢。
我在应用程序中遇到了继承问题。我有一个基类Client,它有一个子类Job。基本上,我试图创建一个Job的构造函数,但我得到一个错误,说''Job_Manager_Application.Client'不包含一个构造函数,它需要0个参数“继承问题C#
不知道为什么它这样做?
在此先感谢。
您的客户端类有一个带参数的构造函数。
因此,您的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.
}
}
为什么Job
一个Client
的一个子类?继承代表是的关系(Cat
是Animal
因此class Cat : Animal { }
)。 A Job
是不是 aClient
。
无论如何,你的错误信息是清楚的。您在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
。
但请重新考虑你的模型。 A Job
不是Client
。
客户端有一个构造函数的参数,你是不是调用它正确
public class Job
{
public Job(int num) { }
}
public class Client : Job
{
public Client() : base(1) {}
}
至少,你应该在这里提供的一段代码为我们想象的问题。 – hirikarate
@ hinkrate:编译器消息在这一个100%清除。 – jason