7

クラスAのメソッドがあります

public IList<T> MyMethod<T>() where T:AObject

このメソッドを別のジェネリッククラスBで呼び出したい。このTには制約がない。

public mehtodInClassB(){
    if (typeof(AObject)==typeof(T))
    {
      //Compile error here, how can I cast the T to a AObject Type
      //Get the MyMethod data
        A a = new A();
        a.MyMethod<T>();
    }
}

クラスCはクラスAObjectから継承されます。

B<C> b = new B<C>();
b.mehtodInClassB() 

何かご意見は?

ursが思い出させた後...更新:

はい。私が実際にやりたいのは

typeof(AObject).IsAssignableFrom(typeof(T))

いいえ

typeof(AObject)==typeof(T))
4

2 に答える 2

7

それがであることがわかっている場合Tは、タイプパラメータとして次のように指定してAObjectください。AObjectMyMethod

if (typeof(AObject).IsAssignableFrom(typeof(T)))
{
  //Compile error here, how can I cast the T to a AObject Type
  //Get the MyMethod data
    d.MyMethod<AObject>();
}

タイプパラメータとして提供することAObjectがオプションでない場合はT、呼び出し元のメソッドに同じ制約を課す必要があります。

void Caller<T>() where T: AObject
{
    // ...

    d.MyMethod<T>();

    // ...
}
于 2012-08-24T17:11:00.707 に答える
1

包含メソッドに同じ制約を課さない限り、それを行うことはできません。ジェネリックはコンパイル時にチェックされるため、そのような実行時の決定を行うことはできません。

または、リフレクションを使用してメソッドを呼び出すこともできます。コードが少し増えるだけです。

これを行う方法の詳細については、このSOの質問を参照してください。リフレクションを使用してジェネリックメソッドを呼び出すにはどうすればよいですか?

于 2012-08-24T17:09:11.700 に答える