簡體   English   中英

C# 錯誤:父級不包含采用 0 個參數的構造函數

[英]C# Error: Parent does not contain a constructor that takes 0 arguments

我的代碼是

public class Parent
{

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

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

}

我收到錯誤:

Parent 不包含采用 0 個參數的構造函數。

我理解問題是Parent沒有帶有 0 個參數的構造函數。 但我的問題是,為什么我們需要一個零參數的構造函數? 為什么沒有它代碼就不能工作?

由於您沒有顯式調用父構造函數作為子類構造函數的一部分,因此插入了對無參數父構造函數的隱式調用。 該構造函數不存在,因此您會收到該錯誤。

要糾正這種情況,您需要添加一個顯式調用:

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

或者,您可以只添加一個無參數的父構造函數:

protected Parent() { } 

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

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

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

C# 中沒有繼承構造函數,您必須手動鏈接它們。

您需要將child類的構造函數更改為:

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

部分: base(i)表示應該使用帶有一個int參數的基類的構造函數。 如果缺少此項,則隱含地告訴編譯器使用不帶參數的默認構造函數。 因為基類中不存在這樣的構造函數,所以它會給你這個錯誤。

編譯器無法猜測應該為基本構造函數參數傳遞什么。 你必須明確地做到這一點:

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

您可以在父類中使用不帶參數的構造函數:

public parent() { } 

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

如果基類沒有無參數構造函數,您必須自己顯式調用它:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM