2012-05-09 9 views
1

C#でジェネリック型を使用するメソッドを持つ基本クラスがあります。次に、これらを継承する他のクラスがあります。親クラスで型を指定したい...どこでもベースクラスのジェネリックを親クラスで指定することができます

を角括弧を避けるために、ここに私の基本クラスのクラスからのサンプルメソッドがCBaseHome

public List<T> fetchAll<T>(CBaseDb db, bool includeEmpty = true) where T : CBaseTable, new() 
{ 
    List<T> retVal = new List<T>(); 
    ... 
    return retVal; 
} 

私は

(この機能を上書きせずに)、このクラスから継承する親クラスを持っています

これを消費するクラスでは私は私が言うことができるしたいと思い

...

List<student> students = new limxpoDB.Home.student().fetchAll<student>(db, false); 

はので、ここでHome.studentクラスはCBaseHomeクラスを継承し、学生がCBaseTableを継承...次のコードを持っています私の消費コードは次のように見えるように、そのクラスの唯一の有効なジェネリック型が学生であることをHome.studentクラス...

List<student> students = new limxpoDB.Home.student().fetchAll(db, false); 

私は違いが分であることをここに実現し、私はまた、いくつかのVBでこのライブラリを使用します>ネットコードはひどく見える...

アイデア法上の

+0

ネット:

あなたが何ができるか
public class Child : Parent { // This is not legal, and there is no legal equivalent. public List<ChildStuff> GetStuff<ChildStuff>() { ... } } 

はむしろそれの方法よりも、親クラス一般的な作りでありますパブリックメンバー名はUpperCamelCaseである必要があります。 – SLaks

+0

'Home.student'は実際に' CBaseHome'から継承していますか? 'Home.student'クラスが宣言されている行を表示できますか? –

+0

'var students = new limxpodb.Home.student()。fetchAll(db、false);'について教えてください。コンパイラを手元に置いてはいけませんが、これを試すことができます。 –

答えて

4

ジェネリック型パラメータは、子クラスによって課さすることはできません

感謝。私が持っているのであれば:

public class Parent { 
    public List<T> GetStuff<T>() { ... } 
} 

を私が行うことはできません。

public class Parent<T> { 
    public List<T> GetStuff() { ... } 
} 

public class Child : Parent<ChildStuff> { 
    // GetStuff for Child now automatically returns List<ChildStuff> 
} 
+0

これは大変感謝しています。私はをT:CBaseHomeにソートしたメソッドではなくクラスに移動しました。ありがとう –

関連する問題