那里!
给出了这个类:
public static class FooClass<TFoo>
{
public static TFoo FooMethod(object source)
{
// implementation goes here
}
}
现在我要创建这个类:
public static class FooClass
{
public static object FooMethod(object source, Type fooType)
{
var classType = typeof (FooClass<>).MakeGenericType(fooType);
var methodInfo = classType.GetMethod("FooMethod", new[]
{
typeof (object)
});
// WHAT NOW?!
}
}
还要提到:
FooMethod
中有FooClass<TFoo>
的重载,但我只想访问提到的重载(签名是匹配的 - 除了paramterNames)object
将是娴熟的FooMethod
通用中FooClass
- 它应该是一个“旧式”界面,因为它将在反射代码中使用答案 0 :(得分:7)
类似的东西:
public static class Foo
{
public static object FooMethod(object source, Type fooType)
{
return typeof(Foo<>).MakeGenericType(fooType)
.GetMethod("FooMethod").Invoke(null, new object[] { source });
}
}
然而 - 这种反射在紧密循环中可能会很慢;如果你这么做,我会试图扭转依赖,所以通用代码调用非通用代码:
public static class Foo<TFoo>
{
public static TFoo FooMethod(object source)
{
return (TFoo)Foo.FooMethod(source, typeof(TFoo));
}
}
(在非通用版本中实现)