C# - 委托、事件、Action、Func

前言:所有的名词,都是基于委托产生的

委托 (delegate

解释:

        其实就是一种指定格式的函数模版(容器)

        这个模版(容器)可以用来存放各种格式和它相同的函数(的引用)

        比如指定类型参数 指定参数个数 指定返回值等等

定义:

        public delegate void MyDelegate();

使用:

       

private MyDelegate m_DelegateAction;

m_DelegateAction = Func1;
m_DelegateAction?.invoke()
m_DelegateAction += Func2;
m_DelegateAction += Func3;
m_DelegateAction?.invoke()
m_DelegateAction -= Func2;
m_DelegateAction -= Func3;
m_DelegateAction?.invoke()

事件(Event)

解释:

        event是一种具有特殊签名的delegate

        event的实现依赖于delegate

        用在定义delegate对象时,在前部加上event签名

定义:

        private event MyDelegate m_DelegateAction;

使用:        

        

private MyDelegate m_DelegateAction;

//在自身类中(声明 event 的类中):可以执行 = + -
m_DelegateAction = Func1;
m_DelegateAction?.invoke()
m_DelegateAction += Func2;
m_DelegateAction += Func3;
m_DelegateAction?.invoke()
m_DelegateAction -= Func2;
m_DelegateAction -= Func3;
m_DelegateAction?.invoke()

//在其他类中:只能执行 + -
m_DelegateAction += Func2;
m_DelegateAction += Func3;
m_DelegateAction?.invoke()
m_DelegateAction -= Func2;
m_DelegateAction -= Func3;
m_DelegateAction?.invoke()

与delegate的区别:

        使用event签名的delegate对象,直接赋值(=)的操作会变成 private 权限

        += 和 -= 是重写变成了 add 和 remove 的方法,是 public 的,所以可以在外部调用

好处:

        可以防止外部直接赋值导致所有的注册丢失,有一定的安全性

Action 

解释:

        Action 就是一个 System 库自带的无even签名、’无返回值的委托

        

Func 

解释:

        Func 就是一个 System 库自带的无even签名、具有泛型返回值的委托

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值