参考视频:
三分钟彻底搞懂委托,事件,Action,Func的作用和区别_哔哩哔哩_bilibili
委托关系图:
Delegate
定义两个模板,一个可以传参一个不可以传参
模板:1、public delegate void xxxxx(int a)
2、public delegate void xxxxx()
注册:符合模板的函数便可以用+=来进行添加
存在的风险:Delegate存在着可以被直接赋值的风险,例如delegate1=delegate2,这样会导致容器内的函数存在丢失的风险。
这个时候如果写成事件Event,赋值操作就不会被允许。
Event
模板:1、public delegate void xxxxx()
2、public event xxxxx delefate1()
但是这么写比较麻烦,所以封装一下写成Action
Action
模板:1、public Action xxxxx()
2、public Action<int> xxxxx()
这里我们没有返回值,如果我们希望有返回值那么就可以使用Function
Func
模板:1、public Func<int> xxxxx() return int
2、public Func<int,bool> xxxxx () return bool
注意:但是若多个返回值发生,则最后保留的是最后注册函数的返回值