繁体   English   中英

继承问题C#

[英]Inheritance issue C#

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

不知道为什么要这么做吗?

提前致谢。

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

为什么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) {}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM