2011-09-23 165 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) {} 
}