web-dev-qa-db-ja.com

C#エラー:親には引数が0のコンストラクターが含まれていません

私のコードは

public class Parent
{

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

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

}

エラーが発生しています:

親には、引数が0のコンストラクタは含まれていません。

この問題は、Parentには引数が0のコンストラクターがないことを理解しています。しかし、私の質問は、なぜ引数がゼロのコンストラクタが必要なのですか?なぜコードがないと機能しないのですか?

141
Kuntady Nithesh

子クラスコンストラクターの一部として親コンストラクターを明示的に呼び出さないため、パラメーターなしの親コンストラクターへの暗黙的な呼び出しが挿入されます。そのコンストラクタは存在しないため、そのエラーが発生します。

状況を修正するには、明示的な呼び出しを追加する必要があります。

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

または、パラメータなしの親コンストラクタを追加することもできます。

protected Parent() { } 
202
dlev

子のコンストラクタを次のように変更する必要があります。

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

親クラスのコンストラクターがパラメーターを取るが、そのパラメーターを子から親に渡していないため、エラーが発生していました。

コンストラクタはC#では継承されないため、手動でチェーンする必要があります。

34
AndrewC

childクラスのコンストラクターを次のように変更する必要があります。

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

: base(i)という部分は、intパラメーターを1つ持つ基本クラスのコンストラクターを使用する必要があることを意味します。これがない場合は、パラメータなしでデフォルトのコンストラクタを使用するようにコンパイラに暗黙的に指示しています。基本クラスにはそのようなコンストラクターが存在しないため、このエラーが発生します。

18
Daniel Hilgarth

コンパイラーは、基本コンストラクター引数に何を渡すべきかを推測できません。明示的に行う必要があります。

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

デフォルトでは、コンパイラーは基本クラスのパラメーターなしのコンストラクターの呼び出しを試みます。

基本クラスにパラメーターなしのコンストラクターがない場合、自分で明示的に呼び出す必要があります。

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

参照: 継承中のコンストラクター呼び出し階層

0
NCA

Parentクラスでは、パラメーターなしでコンストラクターを使用できます。

public parent() { } 
0
Alin