我不做大哥好多年 发表于 2024-8-5 09:13:27

C#.Net筑基-解密委托与事件


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

1.1、什么是委托?

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


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

[*]回调方法,包装方法为委托,作为参数进行传递,解耦了方法的申明、实现和调用,可以在不同的地方进行。
[*]Lambda表达式,这是委托的简化语法形式,更简洁,比较常用。
[*]事件,事件是一种特殊的委托,是基于委托实现的,可以看做是对委托的封装。
1.2、Delegate API

<strong>
来源:https://www.cnblogs.com/anding/p/18229672
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: C#.Net筑基-解密委托与事件