我有一个抽象的泛型类:
public abstract class A<T> where T : class, new(){
public A (IEnumberable<T>_Data){
this.Data = _Data;
}
private IEnumerable<T>_data;
public IEnumerable<T> Data{
get { return _data; }
set { _data = value;}
}
}
然后当我继承那个班级时:
public class B<T> : A<T> where T : class, new(){
}
我收到错误说:
There is not argument that corresponds to the required formal parameter '_Data' of 'A<T>.A(IEnumerable<T>)'
in the 'B' class.
答案 0 :(得分:3)
您需要继承A<T>
,而不是A
:
public class B<T> : A<T> where T : class, new(){
}
此外public A(_Data)
不是构造函数,我认为你想要它。您需要public A<T>(IEnumerable<T> _Data)
代替。
最后但并非最不重要的是,您必须为B
创建一个构造函数,该构造函数可以调用A
中的任何一个构造函数。因此,要么在A
中定义一个无参数构造函数,要在B
中定义一个参数:
IEnumerable<T>
答案 1 :(得分:1)
正如它在错误中所说,它无法创建基类,因为你没有在B中提供正确的构造函数。如果你想传递任何args,请将其更改为此
public class B<T> : A<T> where T : class, new(){
public B(IEnumerable<T> data):base(data) {
}
}
否则,在构造函数中新建数据并将其传递给base。
答案 2 :(得分:1)
在基类上提供公共无参数构造函数,或者像其他人建议通过从派生类传递IEnumberable<T>
来调用基类构造函数