1. 主页
  2. 文档
  3. C#进阶
  4. 第三章 反射
  5. 第八节 通过反射调用普通类中泛型方法

第八节 通过反射调用普通类中泛型方法

static void Main(string[] args)
{
   Console.WriteLine("------------------ 通过反射调用普通类中泛型方法---------------");
   Assembly assembly = Assembly.LoadFrom("DB.MySqlClass.dll");  //加载方式三,完全限定名
   Type type = assembly.GetType("DB.MySqlClass.GenericMethod"); //获取到类型名称; 测普通类中的泛型方法
  object oReflection = Activator.CreateInstance(type);
   MethodInfo methodInfo =type.GetMethod("Test");//加载的是普通类中的泛型方法名称
   //确定方法的参数类型和个数
    MethodInfo methodGeneric = methodInfo.MakeGenericMethod(new Type[] { typeof(int), typeof(string), typeof(DateTime) });
  methodGeneric.Invoke(oReflection, new object[] { 1,"hello 你好",DateTime.Now});

}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DB.MySqlClass
{
    /// <summary>
    /// 泛型类中的泛型方法
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <typeparam name="W"></typeparam>
    /// <typeparam name="S"></typeparam>
    public class GenericClass<T,W,S>
    {
        public void Test(T t,W w,S s)
        {
            Console.WriteLine("第一个类型是{0},第二个类型是{1},第三个类型是{2}",
                t.GetType(),w.GetType(),s.GetType());
        }
    }
    /// <summary>
    /// 普通类中的泛型方法
    /// </summary>
    public class GenericMethod
    {
        public void Test<T,W,S>(T t, W w ,S s)
        {
            Console.WriteLine("第一个类型是{0},第二个类型是{1},第三个类型是{2}",
                t.GetType().Name, w.GetType().Name, s.GetType().Name);
        }
    }
}
这篇文章对您有用吗?

我们要如何帮助您?