委托、Lambda表达式、事件系列01,委托是什么,委托的基本用法,委托的Method和Target属性
2024-10-19 02:21:17
委托是一个类。
namespace ConsoleApplication1{internal delegate void MyDelegate(int val);class Program{static void Main(string[] args){}}}
使用Reflector查看委托的IL代码:
○ 委托的确是一个类
○ 委托的构造函数接收方法和类实例
○ 而且是多播委托,可以用+=为委托变量赋值
○ 委托内部使用Invoke方法触发方法
○ BeginInvoke和EndInvoke方法用于多线程场景
接下来体验委托如何使用,以及委托的Method和Target属性分别代表什么。
namespace ConsoleApplication1{internal delegate void MyDelegate(int val);class Program{static void Main(string[] args){//委托与静态方法MyDelegate d = new MyDelegate(M1);d(10);Console.WriteLine(d.Method);if (d.Target == null){Console.WriteLine("当前委托调用的是静态方法,没有类实例");}else{Console.WriteLine("当前委托调用的是实例方法,类实例为:" + d.Target);}Console.WriteLine("-------------------");//委托与实例方法Program p = new Program();d = p.M2;d.Invoke(10);Console.WriteLine(d.Method);if (d.Target == null){Console.WriteLine("当前委托调用的是静态方法,没有类实例");}else{Console.WriteLine("当前委托调用的是实例方法,类实例为:" + d.Target);}}static void M1(int val){Console.WriteLine("我是静态方法,输出" + val);}void M2(int val){Console.WriteLine("我是实例方法,输出" + val);}}}
○ 委托创建:通过委托构造函数,new MyDelegate(M1);也可通过d = p.M2,这是一种"语法糖"写法,其内部也调用了委托构造函数。
○ 委托与静态方法:只要两者参数列表和返回类型一致,可把静态方法传给委托构造函数
○ 委托与实例方法:只要两者参数列表和返回类型一致,可把实例方法传给委托构造函数
○ 委托调用:像d.Invoke(10),通过委托的实例方法Invoke调用;像d(10),这是一种"语法糖"写法,其内部也调用了实例方法Invoke。
○ Target属性:委托所表示实例方法所属的类实例名称,如果是静态方法,Target为null
○ Method属性:委托所表示的方法,可能是静态方法,也有可能是实例方法
“委托、Lambda表达式、事件系列”包括:
委托、Lambda表达式、事件系列01,委托是什么,委托的基本用法,委托的Method和Target属性
委托、Lambda表达式、事件系列02,什么时候该用委托
委托、Lambda表达式、事件系列03,从委托到Lamda表达式
委托、Lambda表达式、事件系列04,委托链是怎样形成的, 多播委托, 调用委托链方法,委托链异常处理
委托、Lambda表达式、事件系列05,Action委托与闭包
委托、Lambda表达式、事件系列06,使用Action实现观察者模式,体验委托和事件的区别
委托、Lambda表达式、事件系列07,使用EventHandler委托
最新文章
- Linux命令学习总结: file命令
- Unity3D心得分享
- Bootstrap <;基础二十五>;警告(Alerts)
- 【转】 全世界最短的IE判定
- ubuntu12.04安装svn 1.7(转载)
- 转:使用vs2013打开VS2015的工程文件的解决方案(适用于大多数vs低版本打开高版本)
- 【nginx网站性能优化篇(2)】反向代理实现Apache与Nginx的动静分离(LNMPA)
- COJ 1006 树上操作
- 2015第16周六学习java建议
- 学习Java这几个快捷键你得知道(不断更新中)
- Apache 编译扩展的方法
- 【原创】Libjpeg 库使用心得(一) JPEG图像DCT系数的获取和访问
- Linux下的C----多进程与多线程
- spark各种模式提交任务介绍
- 转--HC05-两个蓝牙模块间的通信
- 20155326刘美岑 2016-2017-2 《Java程序设计》第二周学习总结
- HTML/CSS学习(二)
- Codeforces.666A.Reberland Linguistics(DP)
- 【Docker】第三篇 Docker容器管理
- nginx配置location总结及rewrite规则写法【转】
热门文章
- nginx参数优化
- python enumerate用法总结【转】
- File /data/binlog/mysql-bin.index&#39; not found (Errcode: 13)
- 浅谈js设计模式之迭代器模式
- 【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (上篇)
- php常用的安全过滤函数
- android之ExpandableListView 无法展开
- 安装Xampp-配置appche,mysql运行环境遇到的坑(转)
- Intellij IDEA调试功能总结
- Kotlin中var和val的区别