2011-09-23 69 views
0

我在应用程序中遇到了继承问题。我有一个基类Client,它有一个子类Job。基本上,我试图创建一个Job的构造函数,但我得到一个错误,说''Job_Manager_Application.Client'不包含一个构造函数,它需要0个参数“继承问题C#

不知道为什么它这样做?

在此先感谢。

+1

至少,你应该在这里提供的一段代码为我们想象的问题。 – hirikarate

+3

@ hinkrate:编译器消息在这一个100%清除。 – jason

回答

3

您的客户端类有一个带参数的构造函数。

因此,您的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. 
    } 
} 
2

为什么Job一个Client的一个子类?继承代表的关系(CatAnimal因此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

1

客户端有一个构造函数的参数,你是不是调用它正确

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

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