[c#] C#錯誤:父類不包含一個構造函數,它需要0個參數



Answers

您需要將您的孩子的構造函數更改為:

public child(int i) : base(i)
{
    // etc...
}

你得到的錯誤是因為你父類的構造函數接受了一個參數,但是你沒有將該參數從子項傳遞給父項。

構造函數不是用C#繼承的,你必須手動鏈接它們。

Question

我的代碼是

public class Parent
{

    public Parent(int i)
    {
        Console.WriteLine("parent");
    }
}

public class Child : Parent
{
    public Child(int i)
    {
        Console.WriteLine("child");
    }

}

我收到錯誤:

父母不包含帶有0個參數的構造函數。

我明白問題是Parent沒有帶0參數的構造函數。 但我的問題是,為什麼我們需要一個具有零參數的構造函數? 為什麼沒有它的代碼工作?




默認情況下編譯器會嘗試調用基類的無參數構造函數。

如果基類沒有無參數構造函數,則必須自己明確地調用它:

public child(int i) : base(i){
Console.WriteLine("child");}

參考: 構造函數在繼承期間調用層次結構




編譯器無法猜測應該傳遞給基礎構造函數參數的內容。 你必須明確地做到這一點:

public class child : parent {
    public child(int i) : base(i) {
        Console.WriteLine("child");
    }
}



Links