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

98 篇文章 0 订阅
4 篇文章 0 订阅

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

最“看图识字”的。

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

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.





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值