在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