- 最后登录
- 2019-12-2
- 注册时间
- 2012-8-25
- 阅读权限
- 90
- 积分
- 34660
- 纳金币
- 38268
- 精华
- 111
|
区别:
1. event 是 delegate实现的
2. event 的触发只能在所在声明类中调用
A.cs- using UnityEngine;
- using System.Collections;
-
- //委托的 方法声明
- public delegate int fun();
- public class A : MonoBehaviour {
- public fun delegateFun;
- public event fun eventFun;
-
- //类外触发事件的 对外接口
- public void CallEventFun ()
- {
- if(eventFun != null)
- {
- eventFun();
- }
- }
- }
复制代码 CallA.cs- using UnityEngine;
- using System.Collections;
- public class CallA : MonoBehaviour {
-
- void Start ()
- {
- A a = GameObject.Find("Main Camera").GetComponent<A>();
- //类外添加 事件 的响应函数
- a.eventFun += CallBackEvent;
- a.eventFun += CallBackEvent1;
- //类外添加 委托 的响应函数
- a.delegateFun += CallBackDelegate;
- a.delegateFun += CallBackDelegate1;
- //Event 触发 不能 在类外 直接调用事件的触发
- a.eventFun();
- //上面的写法将 报错 error CS0070: The event `A.eventFun' can only appear on the left hand side of += or -= when used outside of the type `A'
- //Event 触发 在外面触发需要 通过封装的方法进行间接触发 eventFun 如下代码
- //a.CallEventFun ();
- //委托可以直接在类外 触发调用
- a.delegateFun();
- }
- //事件响应处理
- int CallBackEvent()
- {
- Debug.Log ("callBackA");
- return 2;
- }
- int CallBackEvent1()
- {
- Debug.Log ("callBackAA");
- return 2;
- }
- //委托响应处理
- int CallBackDelegate(){
- Debug.Log ("delegateFun");
- return 2;
- }
- int CallBackDelegate1(){
- Debug.Log ("delegateFun1");
- return 2;
- }
- }
复制代码 需要注意的是很多人认为 event 使用的 响应方法需要使用void 通过上面的测试 是不正确的。
|
|