class C<T>
{
public void Test(T t)
{
Console.WriteLine(t);
}
}
要利用反射动态创建该类型实例,并调用 Test 方法,我们可以使用如下方法。
Type type = typeof(C<int>);
object o = Activator.CreateInstance(type);
type.InvokeMember("Test", BindingFlags.Default | BindingFlags.InvokeMethod, null, o, new object[] { 123 });
但如果泛型参数是未定的,我们该如何处理呢?其实 Type 已经增加了类似的处理机制。
static void InvokeTest(Type t, params object[] args)
{
Type type = typeof(C<>);
type = type.MakeGenericType(t);
object o = Activator.CreateInstance(type);
type.InvokeMember("Test", BindingFlags.Default | BindingFlags.InvokeMethod, null, o, args);
}
参考:http://www.rainsts.net/article.asp?id=381