2016-07-25 24 views
0

は、私は抽象ジェネリッククラスを持っている発行継承抽象ジェネリッククラス

There is not argument that corresponds to the required formal parameter '_Data' of 'A<T>.A(IEnumerable<T>)' 
in the 'B' class. 
+2

からIEnumberable<T>を渡すことによって、あなたのベースクラスのコンストラクタに電話をかけるあなたのベースクラス上、または他の人が示唆したように公共のパラメータなしのコンストラクタを提供しますかこれはコンパイルされません! – user3185569

+0

これはコンストラクタです –

+0

ええ、ここでコードを手作業で入力しました。それは入力ミスです。 とにかくそれを解決しました –

答えて

3

あなたはAではなくA<T>を継承する必要があります:

public class B<T> : A<T> where T : class, new(){ 

} 

さらにpublic A(_Data)はコンストラクタではありません。代わりにが必要です。

最後に、Aのいずれかを呼び出すことができるBのコンストラクタを作成する必要があります。だから、引数としてIEnumerable<T>BAまたは1でパラメータなしのコンストラクタを定義し、次のいずれか

public class B<T> : A<T> where T : class, new() 
{ 
    public B<T>(IEnumerable<T> data) : base(data) { ... } 
} 
+0

私の元のコードはもう少し複雑ですので、ここで手作業で入力しました。 私はAを継承しました

+1

この質問を投稿する前に、検証可能な例を提供してください。または適切に編集します。 – HimBromBeere

1

、それは誤りで言うように、あなたがそれを変更B.正しいコンストラクタを提供しなかったので、それは基本クラスを作成することはできません。任意の引数を渡したい場合は

public class B<T> : A<T> where T : class, new(){ 
    public B(IEnumerable<T> data):base(data) { 
    } 
} 

それ以外の場合は、コンストラクタでデータを新規にしてベースに渡します。

1

どちらか `公共A(_Data)`は何ですか?派生クラス

関連する問題