前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >认真CS☀️新年快乐!Unity中:委托delegate、Action 与 Fun

认真CS☀️新年快乐!Unity中:委托delegate、Action 与 Fun

作者头像
星河造梦坊官方
发布2024-08-14 15:41:53
710
发布2024-08-14 15:41:53
举报
文章被收录于专栏:星河造梦坊专栏

🟥 委托

“委托”:delegate,是一个引用。我们可以给这个引用,添加很多方法。我们调用(即运行)这个引用,可自动运行我们所有添加的方法。

delegate至少0个参数,至多32个参数

1️⃣ 示例(没有传参、没有返回值):
代码语言:javascript
复制
    public Del mydel;

    public delegate void Del();
    
    private void OnEnable()
    {
        //添加方法
        mydel += Method;
    }

    private void Start()
    {
        //调用委托
        mydel?.Invoke();
    }

    void Method()
    {
        print(111);
    }

//输出:
//111
2️⃣ 带传参的委托

该类委托,可给加上去的方法,传递统一的参数。

代码语言:javascript
复制
    public Del mydel;

    public delegate void Del(int value);

    private void OnEnable()
    {
        //添加方法
        mydel += Method01;
    }

    private void Start()
    {
        //调用委托
        mydel?.Invoke(2);
    }

    void Method01(int value)
    {
        print(value);
    }

//输出:
//2
3️⃣ 带传参、返回值的委托
代码语言:javascript
复制
    public Del mydel;

    public delegate int Del(int value);

    private void OnEnable()
    {
        mydel += Method01;
    }

    private void Start()
    {
        print(mydel?.Invoke(111));
    }

    int Method01(int value)
    {
        return value + 111;
    }

//输出:
//222

🟧 Action

System.Action可给各方法传参,但无返回值。

代码语言:javascript
复制
    Action action00;
    Action<string> action01;

    void OnEnable()
    {
        action00 += Method_00;
        action01 += Method_01;
    }

    private void Start()
    {
        action00?.Invoke();
        action01?.Invoke("Skode");
    }

    void Method_00()
    {
        print(0);
    }

    void Method_01(string value)
    {
        print(value);
    }


//输出:
//0
//Skode

🟨 Func

System.Func可传参,且有返回值

Func<int> 表示返回值为 int

Func <string,int> 表示有传入参数string,返回值int的委托

代码语言:javascript
复制
    Func<int> func00;

    //输入String,返回int
    Func<string, int> func01;

    private void OnEnable()
    {
        func00 += Method_00;
        func01 += Method_01;
    }

    void Start()
    {
        print(func00?.Invoke());
        print(func01?.Invoke("skode"));
    }

    int Method_00()
    {
        return 10;
    }

    int Method_01(string str)
    {
        return str.Length;
    }

大家还有什么问题,欢迎在下方留言!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🟥 委托
    • 1️⃣ 示例(没有传参、没有返回值):
      • 2️⃣ 带传参的委托
        • 3️⃣ 带传参、返回值的委托
        • 🟧 Action
        • 🟨 Func
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档