使用抽象属性

时间:2016-10-14 11:19:25

标签: c# asp.net oop inheritance abstract-class

我正在尝试从一个带有泛型属性的抽象类继承一个类。我想我错过了一些非常重要的东西。我可以摆脱这个错误的唯一方法是摆脱基类中的构造函数。但如果我这样做,那么我的课程将缺乏目的。

错误

  

错误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
    }
}

2 个答案:

答案 0 :(得分:4)

您的派生类中没有明确的构造函数,因此它继承了&#39;基类的构造函数。但是基类构造函数有一个使用泛型类型T的参数,该类型未在派生类中定义。如果将构造函数显式添加到派生类,则应该没问题。 我的意思是这样的:

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

请注意,这种方式IEnumerable<SomeClass>在基类中变为IEnumerable<T>,因为泛型类型参数T绑定到SomeClass中的DerivedClass

答案 1 :(得分:2)

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

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