继承问题C#

时间:2011-09-23 02:21:03

标签: c# inheritance

我的应用程序中存在继承的小问题。我有一个基类Client,它有一个子类Job。基本上,我正在尝试为Job创建一个构造函数,但我收到一条错误,说''Job_Manager_Application.Client'不包含带0参数的构造函数“

无法弄清楚为什么会这样做?

提前致谢。

3 个答案:

答案 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)

为什么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(string)上调用基础构造函数Client。如果未明确指定基础构造函数,编译器将尝试查找可访问无参数构造函数。如果没有,则会遇到您遇到的编译时错误。

所以,你要么像我上面那样做,要么显式地调用可访问的非无参数构造函数,要么将无参数构造函数添加到Client

但请重新考虑你的模特。 Job不是Client

答案 2 :(得分:1)

客户端有一个带参数的构造函数,而你没有正确调用它

public class Job
{
    public Job(int num) { }
}

public class Client : Job
{
    public Client() : base(1) {}
}