从具有抽象属性的泛型类继承



我试图有一个类继承从一个抽象类在它的通用属性。我想我错过了一些很重要的东西。消除这个错误的唯一方法是消除基类中的构造函数。但如果我那样做,我的课就会缺乏目标。

误差

错误CS7036没有给出对应于需要的形式参数"propA"…

基类

public abstract class BaseClass<T> where T:class
{
    public string propA{ get; set; }
    public int propB{ get; set; }
    public IEnumerable<T> propC { get; set; }
    public BaseClass(string propA, int propB, IEnumerable<T> propC)
    {
        this.propA = propA;
        this.propB = spropB; 
        this.propC = propC;
    }
    public abstract IEnumerable<T> Method1();
    public abstract string Method2();
    public abstract void Method3();
}

派生类

public class DerivedClass: BaseClass<SomeClass> 
{
    public override IEnumerable<SomeClass> Method1()
    {
        //Code Here
    }
    public override string GetDefaultSortField()
    {
         //Code Here
    }
    public override void SetSortParams()
    {
         //Code Here
    }
}

在派生类中没有显式构造函数,因此它'继承'基类的构造函数。但是基类构造函数有一个使用泛型类型T的参数,它没有在派生类中定义。如果您显式地向派生类添加构造函数,应该没问题。我的意思是像这样:

    public DerivedClass(string propA, int propB, IEnumerable<SomeClass> propC)
        : base(propA, propB, propC)
    {
    } 

注意,这样一来,IEnumerable<SomeClass>在基类中变成了IEnumerable<T>,因为泛型类型参数T在DerivedClass中被绑定到SomeClass

您在DerivedClass中错过了constructor。但是,由于基类中的默认构造函数包含三个参数,因此需要调用匹配的基构造函数。因此,将此构造函数添加到DerivedClass,它将解决您的问题:

public DerivedClass(string propA, int propB, IEnumerable<SomeClass> propC) 
      : base(propA, propB, propC)
{
}

最新更新