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("这还是一个事件");
}
}