delegate(委托),Event(事件),Action,Func

delegate(委托)是函数的容器,会定义一个函数的模板。

public delegate void xxxx()

Event(事件)本质上也是Delegate,但是赋值的权限设置成了Private

public event xxxx delegate1()

Action是delegate的简写,是C#给我们封装好的一种写法

public Action xxxx()

Func既可以执行函数,也可以获得返回值,其括号内最后一个类型就是返回值

delegate例子:

public delegate void Help(int a);  // 委托(函数的容器)
public class testooo : Singleton<testooo>
{
    public Help p;  // 将委托实例化
    public void Hello(int a)
    {
        Debug.Log(a);
    }
}
public class TestSendMsg : MonoBehaviour
{
    void Start()
    {
        Help p;
        p = testooo.Instance.Hello;
        p?.Invoke(1008666);
    }
}

Action其实就是C#把定义委托和将委托实例化封装成一句代码了,效果是一样的:

public class testooo : Singleton<testooo>
{
    public Action<int> p;  // 同时定义委托和将委托实例化
    public void Hello(int a)
    {
        Debug.Log(a);
    }
}
public class TestSendMsg : MonoBehaviour
{
    void Start()
    {
        Action<int> p;
        p = testooo.Instance.Hello;
        p?.Invoke(1008666);
    }
}

event:

public delegate void Help(int a);  // 委托(函数的容器)
public class testooo : Singleton<testooo>
{
    public event Help p;  // 将委托实例化

    private void Start()
    {
        p = Hello;
        p?.Invoke(1);
    } 

    public void Hello(int a)
    {
        Debug.Log(a);
    }
}

在其它类中无法对testooo类的p进行赋值。

public class TestSendMsg : MonoBehaviour
{
    Help p;
    void Start()
    {
        testooo.Instance.p = eee;  // 这是会报错的
    }
}

Func:

public class testooo : Singleton<testooo>
{
    public Func<int, int> p;  // 将委托实例化

    public void Start()
    {
        p = Hello;
        Debug.Log("^^^^^^^^^^^^^^^^^^^^");
    }

    public int Hello(int a)
    {
        return a * 10;
    }
}
public class TestSendMsg : MonoBehaviour
{
    void Start()
    {
        testooo.Instance.Start();//因为是不继承mono的单例所以要调用一下
        Debug.LogError(testooo.Instance.p(1));
    }
}

输出结果:

10

注意:继承mono的单例中的生命周期方法(Awake,Start,Update)都是走的unity的生命周期。但是如果单例没有继承mono,那么它的这些方法就不会被自动调用,没法走生命周期。

相关推荐

  1. delegate(委托),Event(事件),Action,Func

    2024-04-03 11:56:04       14 阅读
  2. C# 一种基于 event委托事件机制

    2024-04-03 11:56:04       14 阅读
  3. C# 委托Delegate

    2024-04-03 11:56:04       17 阅读
  4. 事件事件委托

    2024-04-03 11:56:04       34 阅读
  5. Qt event事件发送

    2024-04-03 11:56:04       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-03 11:56:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-03 11:56:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-03 11:56:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-03 11:56:04       20 阅读

热门阅读

  1. 第十四届省赛大学B组(C/C++) 冶炼金属

    2024-04-03 11:56:04       13 阅读
  2. Linux--文件、分区与挂载

    2024-04-03 11:56:04       10 阅读
  3. C语言标准库

    2024-04-03 11:56:04       16 阅读
  4. SpringMVC转发和重定向

    2024-04-03 11:56:04       14 阅读
  5. 【C++】编程规范之函数规则

    2024-04-03 11:56:04       17 阅读
  6. 深入理解WebSocket:实时双向通信的利器

    2024-04-03 11:56:04       13 阅读
  7. 【力扣】4. 寻找两个正序数组的中位数

    2024-04-03 11:56:04       14 阅读
  8. C语言求解最大公约数(欧几里得算法的应用)

    2024-04-03 11:56:04       14 阅读
  9. vue 父组件怎么获取子组件里面的data数据

    2024-04-03 11:56:04       16 阅读
  10. 语言模型的原理、实战与评估

    2024-04-03 11:56:04       15 阅读
  11. 详解Qt中使用线程

    2024-04-03 11:56:04       12 阅读
  12. 搜索引擎-02-分词与全文索引

    2024-04-03 11:56:04       13 阅读