你能帮我解决一个问题。我想初始化并使用这样一个类:
public class GenericClass<T>
{
public static T Method(string xml)
{
...
}
}
我想做的是:
public void do(Type _type)
{
var genObj = new GenericClass<_type>(); // Error
var result = genObj.Method("parameter");
}
我已经找到了如何初始化GenericClass here,但我真的不知道如何运行此实例的方法,该方法返回初始化中使用的类型。
答案 0 :(得分:1)
您实际要问的是如何使用反射创建GenericClass<T>
的动态实例。这是它的工作原理:
var genericTypeDefinition = typeof(GenericClass<>);
var concreteType = genericTypeDefinition.MakeGenericType(_type);
var instance = Activator.CreateInstance(concreteType); // Calls default constructor.
如果要调用某些instance.Method()
,则必须将实例强制转换为更具体的类型(因为CreateInstance
只返回一个对象)。我建议您定义一个定义此方法的接口,让GenericClass<>
实现此接口,以便您可以在运行时安全地转换为此接口并调用所需的方法:
interface ISomeInterface
{
object Method(string xml);
}
class GenericClass<T> : ISomeInterface
{
void object ISomeInterface.Method(string xml)
{
return Method(xml);
}
public T Method(string xml)
{
}
}
然后:
var genericTypeDefinition = typeof(GenericClass<>);
var concreteType = genericTypeDefinition.MakeGenericType(_type);
var instance = (ISomeInterface) Activator.CreateInstance(concreteType); // Calls default constructor.
instance.Method("parameter");