[Unity&C#&事件委托]对委托事件的学习与实践

来源:互联网 发布:最全金融网络理财产品 编辑:程序博客网 时间:2024/06/09 20:32

很多人对 委托 事件 进行了 写文章,本文不一定是最好的,但是是

最“看图识字”的。

-------------------------------------------------------------------------------------

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个事件,显示


-------------------------------------------------------------------------------------

参考资料:

1.[unity3d]unity中C#委托的应用

http://blog.csdn.net/dingxiaowei2013/article/details/18428727

2.

3.

4.

5.

6.





原创粉丝点击