ジェネリックとインターフェイスの列挙
-
10-07-2019 - |
質問
すべてがインターフェースを実装するクラスのセットがある場合。
interface IMyinterface<T>
{
int foo(T Bar);
}
それらをすべてリストに入れて、列挙します。
List<IMyinterface> list
foreach(IMyinterface in list)
// etc...
しかし、コンパイラはTが何であるかを知りたい。これはできますか?どうすればこの問題を克服できますか?
解決
IMyinterfaceタイプはなく、type引数を必要とするIMyinterface`1タイプのみがあります。 IMyinterfaceタイプを作成できます:-
interface IMyinterface { ... }
それから継承する
interface IMyinterface<T> : IMyinterface { ... }
foreachループで使用するメンバーをIMyinterface定義に移動する必要があります。
他のヒント
署名にTを含むメソッドを呼び出す場合、答えは不可能です。それ以外の場合は、anthonywjonesが示唆するとおりに実行できます
いつでもTが何であるかをコンパイラーに伝える必要がありますが、要求したとおりに行うことができます:
interface IMyinterface
{
int foo<T>(T Bar);
}
List<IMyinterface> list = new List<IMyinterface>();
foreach(IMyinterface a in list){}
所属していません StackOverflow