Unity学习笔记之——委托与事件

本文介绍了C#中委托的基础概念,包括MyDelegate、Action和Func的声明方式、参数传递和使用,以及匿名方法和多播委托的特性。
摘要由CSDN通过智能技术生成

委托的定义和使用

委托的作用:

如果要把方法作为函数来进行传递的话,就要用到委托。简单来说,委托是一个类型,这个类型可以赋值一个方法的引用。

C#的委托通过delegate关键字来声明。属于引用类型

声明委托:

方式一:delegate void MyDelegate1(int x)

方式二(泛型):delegate void MyDelagate2<T>(T x)

使用委托:

方式一:MyDelegate1 mydelegate1 = new MyDelegate1(func)

方式二:MyDelegate2 mydelegate2 = func

调用委托:

方式一:mydelegate1(参数);

方式二:mydelegate2.Invoke(参数);

Action委托

什么是Action委托

Action<T>是.Net Framework内置的泛型委托,可以使用Action<T>委托以参数形式传递方法,而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说,封装的方法必须具有一个通过值传递给它的参数。而且不能有返回值

还有一种是非泛型委托Action。

注意:

Action委托至少0个参数,至多16个参数,无返回值。

Action表示无参无返回值的委托。

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

Action<int,string,bool>表示有传入参数int,string,bool,无返回值的委托。

使用方式:

方式一:Action action1=方法名;        action1();

方式二:Action<int,int> action2=方法名;        action2(1,2);

Func委托

什么是Func委托

Func是.Net Framework内置的带有返回类型的泛型委托。

注意:

System.Func可以不带参数,但必须带一个返回值

System.Func若是调用了多个泛型的委托定义,最后一个参数的数据类型是函数的返回值类型,需保持一致;非最后一个泛型T的声明,需与实现函数的参数个数及类型保持一致

Func至少0个输入参数,至多16个输入参数,根据返回值泛型返回。(必须有返回值,不可void)

Func<int>表示没有输入参数,返回值为int类型的委托。

Func<object,string,int>表示传入参数为object,string,返回值为int类型的委托。

Func<T1,T2,T3,int>表示传入参数为T1,T2,T3(泛型),返回值为int类型的委托。

使用方式:

方式一:Func<string> func1=方法名;        string a=func1();

方式二:Func<int,string> func2=方法名;        string b=func2(1000);

匿名方法

没有名字的方法。一般作为函数的回调,或与委托联合使用

Action action = delegate()
{
        Debug.Log("匿名函数被执行");
}

Event事件

Event事件本身就是一种委托,只是该委托只能作为类的成员,且不可在类外进行调用

        (1)event事件 只允许作为类的成员变量且仅在类的内部使用,外部不得直接调用

        

多播委托

在C#语言中多播委托是指在一个委托中注册多个方法,在注册方法时可以在委托中使用加减运算符来实现或撤销方法

Action action=Show1;
action+=Show2;
//action-=Show2;
action?.Invoke();

  • 27
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Unity 是一款流行的游戏引擎,它提供了丰富的开发工具和功能,可以用于开发各种类型的游戏和应用程序。 在 Unity 中,委托(Delegate)是一种重要的编程概念,它允许程序员将方法作为参数传递,并通过委托来调用这些方法。 在这个问题中,如果我们有一个委托叫做 greetpeople,我们可以使用 Unity 引擎的相关 API 来实现 greetpeople 这个委托。 首先,我们需要定义 greetpeople 的委托类型。可以使用以下代码: ``` public delegate void GreetPeopleDelegate(string name); ``` 接下来,我们可以编写一个方法作为 greetpeople 的实现,例如: ``` public void Greet(string name) { Debug.Log("Hello, " + name + "!"); } ``` 在这个例子中,我们简单地将传入的名字连接到问候语后面,并使用 Unity 引擎的 Debug.Log 函数输出结果。 最后,我们可以使用 greetpeople 委托来调用 Greet 方法。例如: ``` GreetPeopleDelegate greetpeople = Greet; greetpeople("Bob"); ``` 在这个示例中,我们将 Greet 方法赋值给 greetpeople 委托,并传入字符串 "Bob"。通过调用 greetpeople 委托,我们实际上会调用 Greet 方法,并输出 "Hello, Bob!" 到 Unity 编辑器的日志中。 通过使用 Unity 引擎的委托机制,我们可以更加灵活地设计和组织代码,实现各种功能和交互。无论是游戏开发还是其他应用程序开发,委托都是非常有用的编程工具。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值