Это не совсем верно, что в C # нет эквивалента. Не существует статического эквивалента, который вы можете использовать как тип или вызывать методы, достаточно верно. Для этого используйте ответ Хорхе .
С другой стороны, иногда вам нужна эквивалентная идея для отражения, и там есть эквивалент. Если у вас есть:
interface IFoo<T>
{
T Bar(T t, int n);
}
вы можете получить Type
, который представляет IFoo<int>
, используя typeof(IFoo<int>)
. Менее известным и частичным ответом на ваш вопрос является то, что вы также можете получить Type
, который представляет IFoo<T>
, используя typeof(IFoo<>)
.
Это полезно, когда вы хотите использовать IFoo<T>
для некоторых T
через отражение и не будете знать T
до времени выполнения.
Type theInterface = typeof(IFoo<>);
Type theSpecificInterface = theInterface.MakeGenericType(typeof(string));
// theSpecificInterface now holds IFoo<string> even though we may not have known we wanted to use string until runtime
// proceed with reflection as normal, make late bound calls / constructions, emit DynamicMethod code, etc.