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