继承抽象泛型类时的问题

时间:2016-07-25 07:47:04

标签: c# oop

我有一个抽象的泛型类:

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.

3 个答案:

答案 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>来调用基类构造函数