Unity 委托和事件

using UnityEngine;

public delegate void eventTest(); // 定义一个“函数类型”,可以将方法作为参数传到另一个方法里面
public class Test {
    public eventTest T1;       // 委托
    public event eventTest T2; // 事件,是一种特殊的委托,在类外只能出现在 += 和 -= 左边,所以可以当做类型对外暴露的只读属性的委托线性表
    public Test() {
        T2 = A2; // 只能在类里给事件赋值
    }
    void A2() {
        Debug.Log("这是一个事件");
    }
    void T(eventTest e) { // 传入一个方法作为参数【用法1】
        e();
        Debug.Log("======");
    }
    public void Fire() {
        if(T1 != null) T(T1); // 判断是否可执行,可以用于有执行先后关系的功能里【用法2】
        if(T2 != null) T(T2);
    }
}

public class EventTest : MonoBehaviour {
    Test eT = new Test();
    void Start() {
        eT.T1 = A1;    // 在类外给委托赋值

        eT.T1 += A1_1; // 给委托绑定一个对象
        eT.T2 += A2_1; // 给事件绑定一个事件

        eT.T2 -= A2_1; // 给事件解绑一个对象
        eT.Fire();
    }
    void A1() {
        Debug.Log("这是一个委托");
    }
    void A1_1() {
        Debug.Log("这还是一个委托");
    }
    void A2_1() {
        Debug.Log("这还是一个事件");
    }
}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值