• 反射方法创建委托


     1 using System;
     2 using System.Linq;
     3 using System.Reflection;
     4 using System.Diagnostics.Contracts;
     5 
     6 namespace Walterlv.Demo
     7 {
     8     public static class InstanceMethodBuilder<T, TReturnValue>
     9     {
    10         /// <summary>
    11         /// 调用时就像 var result = func(t)。
    12         /// </summary>
    13         [Pure]
    14         public static Func<T, TReturnValue> CreateInstanceMethod<TInstanceType>(TInstanceType instance, MethodInfo method)
    15         {
    16             if (instance == null) throw new ArgumentNullException(nameof(instance));
    17             if (method == null) throw new ArgumentNullException(nameof(method));
    18 
    19             return (Func<T, TReturnValue>) method.CreateDelegate(typeof(Func<T, TReturnValue>), instance);
    20         }
    21 
    22         /// <summary>
    23         /// 调用时就像 var result = func(this, t)。
    24         /// </summary>
    25         [Pure]
    26         public static Func<TInstanceType, T, TReturnValue> CreateMethod<TInstanceType>(MethodInfo method)
    27         {
    28             if (method == null)
    29                 throw new ArgumentNullException(nameof(method));
    30 
    31             return (Func<TInstanceType, T, TReturnValue>) method.CreateDelegate(typeof(Func<TInstanceType, T, TReturnValue>));
    32         }
    33     }
    34 }
    View Code
    1             // 调用的目标实例。
    2             var instance = new StubClass();
    3 
    4             // 使用反射找到的方法。
    5             var method = typeof(StubClass).GetMethod(nameof(StubClass.Test), new[] { typeof(int) });
    6             Assert.IsNotNull(method);
    7 
    8             // 将反射找到的方法创建一个委托。
    9             var func = InstanceMethodBuilder<int, int>.CreateInstanceMethod(instance, method);
    View Code
  • 相关阅读:
    MySQL Server 5.0安装教程
    c++实现一个小算法
    spring core 与 context理解
    关于eclipse的mysql连接配置
    eclipse中创建一个maven项目
    Oracle中的多表查询(笛卡尔积原理)
    Vue进阶
    计算机网络基础
    java框架之springboot
    bootstrap学习
  • 原文地址:https://www.cnblogs.com/missile/p/9828336.html
Copyright © 2020-2023  润新知