那里!
给出这个类:
public static class FooClass<TFoo>
{
public static TFoo FooMethod(object source)
{
// implementation goes here
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想创建这个类:
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?!
}
}
Run Code Online (Sandbox Code Playgroud)
还要提到:
FooMethod的FooClass<TFoo>,但我只是想给访问中提到过载(签名匹配-除了paramterNames)object将是succifientFooMethod在FooClass通用的-它应该是一个"旧式"的界面,因为它会从反射代码中使用就像是:
public static class Foo
{
public static object FooMethod(object source, Type fooType)
{
return typeof(Foo<>).MakeGenericType(fooType)
.GetMethod("FooMethod").Invoke(null, new object[] { source });
}
}
Run Code Online (Sandbox Code Playgroud)
然而 - 这种反射在紧密的环路中可能很慢; 如果你这么做,我会试图扭转依赖,所以通用代码调用非通用代码:
public static class Foo<TFoo>
{
public static TFoo FooMethod(object source)
{
return (TFoo)Foo.FooMethod(source, typeof(TFoo));
}
}
Run Code Online (Sandbox Code Playgroud)
(在非通用版本中实现)