C#.Net筑基-解密委托与变乱

打印 上一主题 下一主题

主题 526|帖子 526|积分 1578


委托与变乱是C#中历史比力久长的技术,从C#1.0开始就有了,核心作用就是将方法作为参数(变量)来传递和使用。其中委托是基础,须要熟练掌握,编程中常用的Lambda表达式、Action、Func都是委托,包罗变乱也是基于委托实现的。
01、认识委托delegate

1.1、什么是委托?

委托是一种用来包装方法的特别范例,可以将方法包装为对象进行传递、调用,雷同函数指针。delegate 关键字用来定义一个委托范例,语法雷同方法申明,可以看做是一个“方法署名模板”,和方法一样定义了方法的返回值、参数。


  • 用 delegate 定义的委托是一个类,继承自 System.MulticastDelegate、System.Delegate,“方法名”就是委托范例的名称。
  • 委托的使用同其他平凡范例,实例指向一个方法的引用,该方法的申明和委托定义的“方法署名模板”须匹配(支持协变逆变)。
  • 委托支持连接多个委托(方法),称为多播委托(MulticastDelegate),执行时都会调用。
  1. public delegate void Foo(string name); //申明一个委托类型
  2. void Main()
  3. {
  4.     Foo faction;     //申明一个Foo委托(实例)变量
  5.         faction = DoFoo; //赋值一个方法
  6.         faction += str => { Console.WriteLine($"gun {str}"); };  //添加多个"方法实例"
  7.     faction += DoFoo; //继续添加,可重复
  8.         faction("sam");          //执行委托,多个方法会依次执行
  9.     faction.Invoke("zhang"); //同上,上面调用方式实际上还是执行的Invoke方法。
  10. }
  11. private void DoFoo(string name){
  12.         Console.WriteLine($"hello {name}");
  13. }
复制代码
委托的主要使用场景:核心就是把方法作为参数来传递,分离方法申明和方法实现。

  • 回调方法,包装方法为委托,作为参数进行传递,解耦了方法的申明、实现和调用,可以在差别的地方进行。
  • Lambda表达式,这是委托的简化语法情势,更简洁,比力常用。
  • 变乱,变乱是一种特别的委托,是基于委托实现的,可以看做是对委托的封装。
1.2、Delegate API

[table][tr]<strong>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表