c#的继承问题

本文关键字:问题 继承 | 更新日期: 2023-09-27 18:09:37

我的应用程序中有一个关于继承的小问题。我有一个基类Client,它有一个子类Job。基本上,我试图创建一个构造函数的工作,但我得到一个错误说"'Job_Manager_Application。客户端"不包含接受0个参数的构造函数"

不明白它为什么这样做?

c#的继承问题

你的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.
    } 
}

为什么JobClient的子类?继承表示是一个关系(一个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) {}
}