如何用反射呼叫泛型類的方法

katesharing發表於2024-10-24

例子一:泛型類不含建構函式

using System;
using System.Reflection;

namespace 使用反射呼叫泛型類的方法
{
    class Program
    {
        static void Main(string[] args)
        {
            //定義要使用的型別引數(就是呼叫方法時要傳入的引數型別,例如int)
            Type genericTypeArgument = typeof(int);

            //獲取泛型類的定義
            Type generciClassType = typeof(GenericClass<>);

            //建立具體的泛型型別
            Type specificGenericType = generciClassType.MakeGenericType(genericTypeArgument);

            //使用反射建立泛型類的例項
            object instance = Activator.CreateInstance(specificGenericType);

            //獲取方法資訊
            MethodInfo methodInfo = specificGenericType.GetMethod("DoSomething");

            //準備方法引數
            object[] parameters = new object[] { 42 };

            //呼叫方法
            methodInfo.Invoke(instance, parameters);
            Console.ReadKey();
        }
    }

    public class GenericClass<T>
    {
        public void DoSomething(T value)
        {
            Console.WriteLine($"Do something with {value} of type {typeof(T)}");
        }
    }
}

測試結果如下:

相關文章