0

このコードが C# にある場合:

public abstract class Parent
{
    private int x;
    public Parent(int x)
    {
        this.x = x;
    }
    public abstract void foo;
}  
public class Child
{
    public override void foo()
    {  
        x = x + 10;
    }
}

次のエラーが表示されます。

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

非パラメトリックコンストラクタを作成せずに、どうすれば修正できますか?

4

3 に答える 3

4

Childたとえば、でコンストラクターを作成できます

public Child(int x) : base(x)
{
}

コンストラクターは継承されませんが、コンストラクターをまったく指定しない場合、C# コンパイラーはこれに相当するものを作成しようとします。

public Child() : base()
{
}

呼び出すパラメーターのない基本コンストラクターがないため、これがここで失敗しているものです。

もちろん、派生クラスのコンストラクターは、基本クラスのコンストラクターと同じパラメーターを持つ必要はありません。適切な引数を基本コンストラクターに渡す限り、それで問題ありません。たとえば、次のように記述できます。

public Child() : base(0) // Default to x = 0
{
}

詳細については、コンストラクターに関する私の記事を参照してください。

于 2013-03-02T12:58:35.513 に答える
0

親のコンストラクターを手動で呼び出す:

public class Child: Parent {
    public Child( ) 
        : base(0) { }

    public override void foo( ) {  
        x = x + 10;
    }
}
于 2013-03-02T12:59:09.547 に答える
0

これは、引数なしのコンストラクターへの Implicit 呼び出しがあるためです。

したがって、明示的な呼び出しを追加する必要があります。

public Child(int x) : base(x)
{
}

または、代わりに、親自体にゼロ引数のコンストラクターを追加できます。

public parent() { }
于 2013-03-02T13:01:06.013 に答える