阅读量:0
在C#中使用反射实现泛型的动态操作可以通过以下步骤实现:
获取泛型类型的Type对象: 可以使用Type.MakeGenericType方法根据泛型类型参数动态创建泛型类型的Type对象。
创建泛型类型的实例: 使用Activator.CreateInstance方法根据Type对象创建泛型类型的实例。
调用泛型类型的方法或属性: 通过MethodInfo对象获取泛型类型的方法或属性,并使用MethodInfo.Invoke方法调用方法或获取属性的值。
下面是一个示例代码,展示如何使用反射实现泛型的动态操作:
using System; using System.Reflection; public class Program { public static void Main() { Type genericType = typeof(List<>); Type[] typeArgs = { typeof(int) }; Type specificType = genericType.MakeGenericType(typeArgs); object instance = Activator.CreateInstance(specificType); MethodInfo addMethod = specificType.GetMethod("Add"); addMethod.Invoke(instance, new object[] { 10 }); MethodInfo getItemMethod = specificType.GetMethod("GetItem"); int result = (int)getItemMethod.Invoke(instance, new object[] { 0 }); Console.WriteLine("Item at index 0: " + result); } } public class List<T> { private T[] items = new T[10]; public void Add(T item) { items[0] = item; } public T GetItem(int index) { return items[index]; } }
在上面的示例中,我们首先获取泛型类型List<>的Type对象,然后根据Type对象和泛型类型参数int创建特定类型List