【发布时间】:2017-02-23 19:28:38
【问题描述】:
我试图让一个类继承自一个具有泛型属性的抽象类。我想我错过了一些真正重要的东西。我可以摆脱这个错误的唯一方法是摆脱基类中的构造函数。但是,如果我这样做,那么我的课程将缺乏目标。
错误
错误 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
}
}
【问题讨论】:
-
也许你应该使用接口而不是抽象基类(例如
IBaseClass<T>)。然后你可以根据自己的需要设计构造函数。 -
这与抽象类或泛型无关 - 这只是派生类中的默认构造函数调用基类中的构造函数而不传递参数的问题。你的基类可能是具体的和非泛型的,你仍然会遇到同样的问题。如果你打电话给
new DerivedClass(),你想发生什么?您是否期望BaseClass中的三参数构造函数被调用,如果是,您期望传递给它的参数是什么? -
借助 VS2015 F10 还可以帮助您自动创建派生构造函数
-
@JonSkeet 你是对的。我错过了 DerivedClass 中的构造函数。谢谢。
标签: c# asp.net oop inheritance abstract-class