你好!
给出的是这个类:
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
通用 - 它应该是一个“旧式”接口(interface),因为它将在反射代码中使用
最佳答案
类似于:
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));
}
}
(在非通用版本中实现)
关于c# - 如何从类型转换为泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4215729/