2016-10-14 6 views
1

私は、クラスにジェネリックプロパティを持つ抽象クラスを継承しようとしています。私は本当に重要なことを見逃していると思う。私はこのエラーを取り除くことができる唯一の方法は、ベースクラスのコンストラクタを取り除くことです。しかし、私がそれをすると、私のクラスは目的が不足します。抽象的なプロパティを持つジェネリッククラスの継承

エラー 必要な仮パラメータ 'が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 
    } 
} 
+0

抽象基本クラスの代わりに、インターフェース(たとえば、 'IBaseClass ')を使用する必要があります。次に、あなたのニーズに基づいてコンストラクタを設計することができます。 – Jure

+6

これは、抽象クラスまたはジェネリックスとは何の関係もありません。引数を渡す基本クラスのコンストラクタを呼び出す派生クラスのデフォルトコンストラクタの問題です。ベースクラスは具体的で非ジェネリックで、あなたは同じ問題を抱えています。 'new DerivedClass()'を呼び出すとどうなりますか? 'BaseClass'の3パラメータコンストラクタが呼び出されることを期待していますか?もしそうなら、どの引数が渡されると思いますか? –

+0

VS2015 F10を使用すると、派生したコンストラクタを自動的に作成するのに役立ちます –

答えて

4

はあなたがあなたの派生クラスで明示的なコンストラクタを持っていないので、基底クラスのコンストラクタを「継承」。しかし、基本クラスのコンストラクターには、派生クラスで定義されていない汎用タイプTを使用するパラメーターがあります。派生クラスに明示的にコンストラクタを追加する場合は、それが問題ありません。ジェネリック型パラメータTがDerivedClassSomeClassにバインドされているように、この方法はIEnumerable<SomeClass>は、基底クラスにIEnumerable<T>なること

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

注: は、私はこのような意味します。

2

あなたはDerivedClassconstructorを逃しました。しかし、基本クラスのデフォルトのコンストラクタには、一致する基本コンストラクタを呼び出すために必要な3つのパラメータが含まれているためです。だから、DerivedClassに、このコンストラクタを追加し、それはあなたの問題を解決します:

public DerivedClass(string propA, int propB, IEnumerable<SomeClass> propC) 
     : base(propA, propB, propC) 
{ 
} 
関連する問題