2008-11-22 3 views
1

Если у вас есть набор классов, которые реализуют интерфейс.обобщения и интерфейсы enumeration

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

Я хочу засунуть их все в список и перечислить через них.

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

, но компилятор хочет знать, что такое T. Я могу сделать это? Как я могу решить эту проблему?

ответ

7

Нет типа IMyinterface, существует только тип IMyinterface`1, для которого требуется аргумент типа. Вы можете создать тип IMyInterface: -

interface IMyinterface { ... } 

затем наследовать от него

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

Вы должны были бы переместить все элементы вы хотели бы использовать в цикле Еогеасп определению IMyInterface.

1

Если вы планируете вызывать метод с T в сигнатуре, ответ заключается в том, что вы не можете. В противном случае вы можете сделать, как anthonywjones предлагает

1

Вам все еще нужно, чтобы сообщить компилятору, что T является в какой-то момент, но только то, что вы просили можно сделать:

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

List<IMyinterface> list = new List<IMyinterface>(); 
foreach(IMyinterface a in list){} 

 Смежные вопросы

  • Нет связанных вопросов^_^