我在應用程序中遇到了繼承問題。我有一個基類Client,它有一個子類Job。基本上,我試圖創建一個Job的構造函數,但我得到一個錯誤,說''Job_Manager_Application.Client'不包含一個構造函數,它需要0個參數「繼承問題C#
不知道爲什麼它這樣做?
在此先感謝。
我在應用程序中遇到了繼承問題。我有一個基類Client,它有一個子類Job。基本上,我試圖創建一個Job的構造函數,但我得到一個錯誤,說''Job_Manager_Application.Client'不包含一個構造函數,它需要0個參數「繼承問題C#
不知道爲什麼它這樣做?
在此先感謝。
您的客戶端類有一個帶參數的構造函數。
因此,您的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.
}
}
爲什麼Job
一個Client
的一個子類?繼承代表是的關係(Cat
是Animal
因此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
。
客戶端有一個構造函數的參數,你是不是調用它正確
public class Job
{
public Job(int num) { }
}
public class Client : Job
{
public Client() : base(1) {}
}
至少,你應該在這裏提供的一段代碼爲我們想象的問題。 – hirikarate
@ hinkrate:編譯器消息在這一個100%清除。 – jason