委托和事件的区分

  1. 在Unity中,委托和事件是相似的,因为它们都允许你将函数作为参数传递,它们都可以用于创建回调系统。然而,两者之间存在一些差异

  2. 委托是一种类型,它表示对具有特定签名的方法的引用。它们可用于将函数作为参数传递给其他函数,或存储对函数的引用以供以后使用。当调用委托时,它调用它引用的方法。

  3. 另一方面,事件是创建回调系统的一种方式,可以在其中注册多个函数,以便在发生特定事件时调用。事件基于委托,可以看作委托的集合。它们可以用来在发生事情时通知其他对象,比如当按钮被点击时,或者当动画结束播放时。

下面是一个例子来说明委托和事件之间的区别:

`

``csharp
using UnityEngine;
using System;

public class Example : MonoBehaviour
{
    //声明委托类型
    delegate void MyDelegate(string message);

    // 声明事件类型
    event MyDelegate MyEvent;

    // 使用委托将函数作为参数传递
    void UseDelegate(MyDelegate del)
    {
        del("Hello from the delegate!");
    }

    // 当有事情发生时,使用事件通知多个函数
    void UseEvent()
    {
        MyEvent("Hello from the event!");
    }

    void Start()
    {
        // 创建一个委托并将其传递给UseDelegate函数
        MyDelegate myDelegate = Debug.Log;
        UseDelegate(myDelegate);

        //用事件注册一个函数
        MyEvent += Debug.Log;

        // Call the UseEvent function, which will invoke all registered functions
        UseEvent();
    }
}
  1. 在这个例子中,MyDelegate委托类型是用一个带有字符串参数的签名来定义的。UseDelegate函数接受MyDelegate委托作为参数,并使用给定的消息调用它。

    MyEvent事件是使用MyDelegate委托类型声明的。可以使用+=操作符将函数注册到事件,当调用UseEvent函数引发事件时,将使用给定的消息调用所有已注册的函数。

    在Start函数中,使用Debug.Log作为要调用的方法创建MyDelegate委托,然后将其传递给UseDelegate函数。使用+=操作符将调用Debug.Log的匿名函数注册到MyEvent事件。最后,调用UseEvent函数,它将调用所有已注册的函数,并传递消息“来自事件的Hello
    !”

签名不是没有方法体的方法,而是对方法、委托或事件的参数和返回类型的描述。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值