1

すべてがインターフェイスを実装する一連のクラスがある場合。

interface IMyinterface<T>
{
    int foo(T Bar);
}

それらをすべてリストに押し込み、それらを列挙したいと思います。

 List<IMyinterface> list
 foreach(IMyinterface in list)
 // etc...  

しかし、コンパイラは T が何であるかを知りたがっています。私はこれを行うことができますか?どうすればこの問題を克服できますか?

4

3 に答える 3

7

IMyinterface 型はなく、型引数を必要とする IMyinterface`1 型だけがあります。IMyinterface タイプを作成できます:-

interface IMyinterface { ... }

次に、それを継承します

interface IMyinterface<T> : IMyinterface { ... }

foreach ループで使用するメンバーを IMyinterface 定義に移動する必要があります。

于 2008-11-22T12:30:57.667 に答える
1

いつかTが何であるかをコンパイラーに伝える必要がありますが、要求したとおりに実行できます。

 interface IMyinterface
{
    int foo<T>(T Bar);
}

List<IMyinterface> list = new List<IMyinterface>();
foreach(IMyinterface a in list){}
于 2008-11-22T13:13:58.173 に答える
1

署名に T を含むメソッドを呼び出す予定がある場合、答えはできないということです。それ以外の場合は、anthonywjones が示唆するように行うことができます

于 2008-11-22T12:32:50.660 に答える