很多人对 委托 事件 进行了 写文章,本文不一定是最好的,但是是
最“看图识字”的。
-------------------------------------------------------------------------------------
1.通过对 参考资料 1 进行 测试。
对象的配置
“T_Delegate_Event”代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class T_Delegate_Event : MonoBehaviour {
//public Button Button_1;//+1
//public Button Button_2;//-1
private delegate void DebugString(string debug_str);//定义一个委托
public void DebugNameOfCN(string str)//输出中文名字
{Debug.Log(" 中文名字: "+str);}
public void DebugNameOfEN(string str)//输出英文名字
{ Debug.Log(" EN Name: " + str);}
private DebugString HandlerDebugString;//定义一个委托的变量事件
public void DebugEventButon_1()
{
HandlerDebugString = DebugNameOfCN;
HandlerDebugString("尼古拉斯 赵思");
}
public void DebugEventButon_2()
{
HandlerDebugString = DebugNameOfEN;
HandlerDebugString("Nicholas Zhao four");
}
}
结果:
按下对应的按钮,显示 对应的名字
-------------------------------------------------------------------------------------
2.测试委托事件的多路广播
代码:在测试 1的基础上加上 start函数 的内容
void Start()
{
//给委托对象赋值
HandlerDebugString = DebugNameOfCN;
HandlerDebugString("1***尼古拉斯 赵思");
Debug.Log("................................");
//给委托对象再加一个事件,叫多路广播
HandlerDebugString += DebugNameOfEN;
HandlerDebugString("2***Nicholas Zhao four");
Debug.Log("................................");
//输出中文试试
HandlerDebugString("3***尼古拉斯 赵思");
Debug.Log("................................");
//给委托对象减去一个事件
HandlerDebugString -= DebugNameOfCN;
HandlerDebugString("4***Nicholas Zhao four");
}
显示结果:
逻辑图:
-------------------------------------------------------------------------------------
把 上图 变成 下图,样式
变成了
2.1这是正常 的情况
情况如下所示
2.2把 += 变成 了 =
结果如下所示
由2.1和2.2得出结论,委托声明类似 class 类的声明,
private delegate void DebugString(string debug_str);//定义一个委托
定义一个 事件 类似 class 类 变量
private DebugString HandlerDebugString;//定义一个委托的变量事件
委托变成private class test_class{....}
事件变成private test_class test_event;
也是一样的。
而事件 一开始 没有 赋予 函数的时候,就没有事件。
当事件 赋予 了一个 函数 的值 的时候。
HandlerDebugString = DebugNameOfCN;
HandlerDebugString("1***尼古拉斯 赵思");
就会显示
当事件 已经 赋予 了 一个 函数值,再 += 一个 函数的时候。
HandlerDebugString = DebugNameOfCN;
HandlerDebugString("1***尼古拉斯 赵思");
HandlerDebugString += DebugNameOfEN;
HandlerDebugString("2***Nicholas Zhao four");
Debug.Log("................................");
就有了2个事件,显示
-------------------------------------------------------------------------------------
参考资料:
http://blog.csdn.net/dingxiaowei2013/article/details/18428727
2.
3.
4.
5.
6.