9

これで、C#のインターフェイスとデリゲートにジェネリック共変性と反変性ができたので、が与えられたらType、そのジェネリック引数の共変性/反変性を理解できます。私は独自の実装を書き始めました。これは、特定の型のすべてのメソッドを調べて、戻り値の型や引数が汎用引数の型と一致するかどうかを確認します。問題は、私がこれを持っていても:

public interface IFoo<T>
{
   void DoSomething(T item);
}

私のロジックを使用すると、それは反変であるはずのように見えますが、実際には指定しなかったため、次のようになります。

public interface IFoo<in T>
{
   void DoSomething(T item);
}

(inパラメーター)実際には反変ではありません。これが私の質問につながります:ジェネリックパラメーターの分散を決定する方法はありますか?

4

1 に答える 1

6

なぜこれが必要なのかわかりませんが、タイプの外側からの反射で見ることができます。リフレクションを使用して型のジェネリック パラメーターを調べる方法については、次のとおりです。

http://msdn.microsoft.com/en-us/library/b8ytshk6.aspx

具体的には、Type.GetGenericParameters の呼び出しから返される型のプロパティ Type.GenericParameterAttributes は、ジェネリック引数の Co/Contravariance プロパティを明らかにします...これは、この情報の組み合わせを明らかにするビット単位の列挙型です。

http://msdn.microsoft.com/en-us/library/system.reflection.genericparameterattributes.aspx

本当に興味深い...これを聞いてくれて、調べてくれてありがとう。

于 2010-05-27T04:39:43.557 に答える