通过对象方法获取委托_C#反射获取委托_
前言:时间紧,先写关键代码,以后优化:
在此感谢其他博友分享的文章,参考文章:C#反射委托创建器
1-定义含有委托的类:
public class TimeCycle
{
/// <summary>
/// 唯一标识
/// </summary>
public int ID { get; set; }
/// <summary>
/// 静态方法委托(只定义委托参数即可)
/// </summary>
public Action<TimeCycle, string> Action { get; set; }
/// <summary>
/// 实例方法委托(实例类型+定义委托参数)
/// </summary>
public Action<MyTipsService, TimeCycle, string> Action2 { get; set; }
}
2-初始化类:
创建委托方法1--创建静态方法的委托,只需要2个参数:委托类型和方法信息:
Delegate.CreateDelegate(typeof(Action<TimeCycle, string>), myTipType.GetMethod("SendTipsToDingding"))
创建委托方法2--创建实例方法的委托,需要2+1个参数:除了上面的委托类型和方法信息;还有,,,还有被委托方法对应的实例类型!!!
即:Action<TimeCycle, string> 类型必须改为含有实例类型的委托:Action<MyTipsService,TimeCycle, string>,至于为什么? 应该是因为,非静态方法的委托调用需要实例依托在实例的基础上,只有实例才能权利调用实例方法。
所以,实例方法创建的委托必须得包含实例类型才能正常创建。
备注:创建委托失败常出现的一个错误,需要对委托的是否静态方法和对应参数进行检查:
System.ArgumentException:“无法绑定到目标方法,因其签名或安全透明度与委托类型的签名或安全透明度不兼容。”
public partial class MyTipsService : ServiceBase
{ public void Test()
{
Type myTipType = typeof(MyTipsService);
//创建静态方法委托1:
TimeCycle timeCycle1 = new TimeCycle
{
ID = ,
Action = (Action<TimeCycle, string>)Delegate.CreateDelegate(typeof(Action<TimeCycle, string>), myTipType.GetMethod("MyProjectBugTips")),
};
//创建实例方法委托2:
TimeCycle timeCycle2 = new TimeCycle
{
ID = ,
Action2 = (Action<MyTipsService, TimeCycle, string>)Delegate.CreateDelegate(typeof(Action<MyTipsService, TimeCycle, string>), myTipType.GetMethod("SendTipsToDingding")),
}; var a = ;
} #region 获取提醒消息 /// <summary>
/// 每天上下班提醒
/// </summary>
public void SendTipsToDingding(TimeCycle timeCycle, string typeStr)
{ } /// <summary>
/// 我的项目BUG的提醒
/// </summary>
public static void MyProjectBugTips(TimeCycle timeCycle, string typeStr)
{ } #endregion }
通过对象方法获取委托_C#反射获取委托_的更多相关文章
- Asp.Net SignalR 使用记录 技术回炉重造-总纲 动态类型dynamic转换为特定类型T的方案 通过对象方法获取委托_C#反射获取委托_ .net core入门-跨域访问配置
Asp.Net SignalR 使用记录 工作上遇到一个推送消息的功能的实现.本着面向百度编程的思想.网上百度了一大堆.主要的实现方式是原生的WebSocket,和SignalR,再次写一个关于A ...
- java.lang.reflect.Method.getAnnotation()方法示例【通过反射获取到方法对象再获取方法对象上的注解信息】
转: java.lang.reflect.Method.getAnnotation()方法示例 java.lang.reflect.Method.getAnnotation(Class <T&g ...
- 6.12---前提两个对象的成员必须一致,才能将有数据的对象将数据传给反射获取的对象conver(有数据对象,目标对象)
//// Source code recreated from a .class file by IntelliJ IDEA// (powered by Fernflower decompiler)/ ...
- org.reflections 接口通过反射获取实现类源码研究
org.reflections 接口通过反射获取实现类源码研究 版本 org.reflections reflections 0.9.12 Reflections通过扫描classpath,索引元数据 ...
- javaWEB总结(4):ServletContext对象方法
前言:之前每次学到ServletContext对象都会抗拒,跳着学,后面才发现有很多不懂的原理都在这个对象里面,后悔莫及,所以今天特地把他单放在一篇文章里,算是对他的忏悔. 1.什么是ServletC ...
- day03 Django目录结构与reques对象方法
day03 Django目录结构与reques对象方法 今日内容概要 django主要目录结构 创建app注意事项(重点) djago小白必会三板斧 静态文件配置(登录功能) requeste对象方法 ...
- Java反射获取对象成员属性,getFields()与getDeclaredFields()方法的区别
Java反射获取对象成员属性,getFields()与getDeclaredFields()方法的区别 在工作中遇到一个问题,就是你需要去判断某个字符串是不是对象的某个成员属性名,然后根据判断结果 ...
- java通过读取本地文件获取反射方法参数,执行对象方法
运用到的知识点 IO流, 集合properties 反射 在工程目录下新建file config.properties #one time only can run one method cl ...
- 反射----获取class对象的五种方法
反射Reflection 配合注解使用会格外强大,反射注解,天生一对 类如何加载? 动态语言和静态语言.我知道是什么,不用总结了. 由于反射,Java可以称为准动态语言. 允许通过反射获得类的全部信息 ...
随机推荐
- jmeter 中使用正则表达式提取依赖参数
1:登录接口 这里有一个实际的登录接口,在响应中返回了一串token,如下图 那么我们在接下来的接口-经验库列表中,就必须带入这一串token,否则响应报错,如下图所示 如何获取登录的口令呢?这 ...
- Python3字典update()方法
描述 Python字典update()函数把字典参数dict2的key/value(键/值)对更新到字典dict里. update()方法语法: dict.update(dict2) 参数 dict2 ...
- 一起学Android之音频视频
概述 Android多媒体框架支持各种常见的媒体类型,可以很容易地将音频.视频和图像集成到App中.通过MediaPlayer Api,可以从应用程序资源(RAW).文件系统或网络上数据流资源来播放音 ...
- [转]Paste from Excel into C# app, retaining full precision
本文转自:https://stackoverflow.com/questions/8614910/paste-from-excel-into-c-sharp-app-retaining-full-pr ...
- iOS中点击按钮复制指定内容
话不多说,直接上图和代码:
- UITableView HeaderView,FooterView 使用SnapKit布局导致约束异常
今天做一个APP里面设置页面(个人中心) 就是一个列表菜单 顶部是一个头像和账户标题, 底部为一个退出登录按钮 当然我第一时间就想到了UITableView, HeaderView, FooterVi ...
- 【JDBC】JDBC入门
JDBC的入门 搭建开发环境 编写程序,在程序中加载数据库驱动 建立连接 创建用于向数据库发送SQL的Statement对象 从代表结果集的ResultSet中取出数据 断开与数据库的连接,并释放相关 ...
- Linux日志中出现大量dhclient mesage浅析
最近检查发现一台Linux服务器,发现其日志里面有大量下面信息,其中部分信息做了脱敏处理.其中一个地址A(192.168.AAA.AAA) 为DNS服务器地址,地址B(192.168.BBB.BBB) ...
- ramfs 和 tmpfs 以及 ramdisk相关调研
最近需要使用到 ramfs 和 tmpfs 做内存文件系统,下面对这两个文件系统相关的信息,做一下总结: 参考链接: https://www.thegeekstuff.com/2008/11/over ...
- myeclipse 9.0 破解方法,亲测可用
MyEclipse 9.0的破解方法,步骤如下: 1.破解公钥,确保MyEclipse没有开启,否则失败! 用WinRAR打开Common\plugins\com.genuitec.eclipse.c ...