1.概要
Type genericType = typeof(A<,>);
Type[] templateTypeSet = new[] { typeof(int),typeof(string) };
Type implementType = genericType.MakeGenericType(templateTypeSet);
A<int,string> a = (A<int,string>)System.Activator.CreateInstance(implementType);
//创建对象的另一种方式
object indexVavlue = implementType.Assembly.CreateInstance(implementType.FullName);
2.代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 反射创建泛型类
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("反射创建泛型类");
Type genericType = typeof(A<,>);
Type[] templateTypeSet = new[] { typeof(int),typeof(string) };
Type implementType = genericType.MakeGenericType(templateTypeSet);
A<int,string> a = (A<int,string>)System.Activator.CreateInstance(implementType);
//创建对象的另一种方式
object indexVavlue = implementType.Assembly.CreateInstance(implementType.FullName);
//获取此类型泛型类型参数的数组。
foreach (Type t in implementType.GenericTypeArguments) {
Console.WriteLine(t.Name);
}
try
{
//返回表示当前泛型类型参数约束的 System.Type 对象的数组。
foreach (Type t in implementType.GetGenericParameterConstraints())
{
Console.WriteLine(t.Name);
}
}
catch (Exception ex) {
}
//返回一个表示可用于构造当前泛型类型的泛型类型定义的 System.Type 对象。
Type t2 = genericType.GetGenericTypeDefinition();
Console.WriteLine(t2.Name);
Console.ReadKey();
}
}
class A<T,T2> {
}
}
3.运行结果
反射创建泛型类
Int32
String
A`2
763

被折叠的 条评论
为什么被折叠?



