私は、クラスにジェネリックプロパティを持つ抽象クラスを継承しようとしています。私は本当に重要なことを見逃していると思う。私はこのエラーを取り除くことができる唯一の方法は、ベースクラスのコンストラクタを取り除くことです。しかし、私がそれをすると、私のクラスは目的が不足します。抽象的なプロパティを持つジェネリッククラスの継承
エラー 必要な仮パラメータ 'がpropa' に対応して与えられた引数はありません
エラーCS7036 ...
基本クラス
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')を使用する必要があります。次に、あなたのニーズに基づいてコンストラクタを設計することができます。 –
Jure
これは、抽象クラスまたはジェネリックスとは何の関係もありません。引数を渡す基本クラスのコンストラクタを呼び出す派生クラスのデフォルトコンストラクタの問題です。ベースクラスは具体的で非ジェネリックで、あなたは同じ問題を抱えています。 'new DerivedClass()'を呼び出すとどうなりますか? 'BaseClass'の3パラメータコンストラクタが呼び出されることを期待していますか?もしそうなら、どの引数が渡されると思いますか? –
VS2015 F10を使用すると、派生したコンストラクタを自動的に作成するのに役立ちます –