• zt:泛型反射和普通反射的区别


    泛型反射和普通反射的区别就是泛型参数的处理上
    
    先看一个简单的例子。
    
    class Class1<T>
    {
      public void Test(T t)
      {
        Console.WriteLine(t);
      }
    }
    
    要利用反射动态创建该类型实例,并调用 Test 方法,我们可以使用如下方法
    
    Type type = typeof(Class1<int>);
    object o = Activator.CreateInstance(type);
    type.InvokeMember("Test", BindingFlags.Default | BindingFlags.InvokeMethod, null, o, new object[] { 123 });
    
    但如果泛型参数是未定的,我们该如何处理呢?其实 Type 已经增加了类似的处理机制。
    
    static void InvokeTest(Type t, params object[] args)
    {
      Type type = typeof(Class1<>);
      type = type.MakeGenericType(t);
      object o = Activator.CreateInstance(type);
      type.InvokeMember("Test", BindingFlags.Default | BindingFlags.InvokeMethod, null, o, args);
    }
    
    另外一种情况就是泛型方法,
    class Class1
    {
      public void Test<T>(T t)
      {
        Console.WriteLine(t);
      }
    }
    
    方法类似,只不过这回使用的是 MethodInfo.MakeGenericMethod()
    
    static void InvokeTest(Type t, params object[] args)
    {
      Type type = typeof(Class1);
      object o = Activator.CreateInstance(type);
      MethodInfo method = type.GetMethod("Test", BindingFlags.Instance | BindingFlags.Public);
    
      method = method.MakeGenericMethod(t);
      method.Invoke(o, args);
    }
  • 相关阅读:
    CAD中导入.pat文件
    使用solid works 助力NBA | 操作案例
    Java关键字---this的由来和其三大作用
    关于solid works中的:动态链接库(DLL)初始化例失败的解决方法
    基于51单片机的keli安装方法
    wintc的安装方法
    文件处理2
    文件处理1
    CAD绘制篮球教程
    数据分析之Numpy
  • 原文地址:https://www.cnblogs.com/youfan/p/2010875.html
Copyright © 2020-2023  润新知