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.GenericClass`3"); //获取到类型名称3个参数 
    Type typeNew = type.MakeGenericType(new Type[] { typeof(int), typeof(DateTime), typeof(string) });

   object oReflection = Activator.CreateInstance(typeNew); //实例化类型
   MethodInfo methodInfo = typeNew.GetMethod("Test"); //找到方法
   MethodInfo methodinforNew = methodInfo.MakeGenericMethod(new Type[] { typeof(int), typeof(DateTime), typeof(string) });
   methodinforNew.Invoke(oReflection,new object[] { 2,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<X,Y,Z>(X x, Y y, Z z)
        {
            Console.WriteLine("第一个类型是{0},第二个类型是{1},第三个类型是{2}",
                x.GetType().Name,y.GetType().Name,z.GetType().Name);
        }
    }

    /// <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);
        }
    }
}
这篇文章对您有用吗?

我们要如何帮助您?