【Unity基础知识】委托和事件

发布 : Unity培训      来源:Unity干货资料

2021-03-18 19:40:06

看了之前的文章,大家都知道Unity使用脚本最主流的语言就是C#语言。作为程序员小哥哥,平时经常会听到C#语言中的委托和事件吧。我们今天重点来学习一下委托。

委托和事件各种项目的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里憋得慌,浑身不自在。本文中,将通过两个案例由浅入深地讲述什么是委托、为什么要使用委托以及事件的由来。

委托的关键字是delegate。也就是和int、string一样,用delegate关键字来声明一个委托类型。而委托的声明方式和类却完全不同,这是怎么一回事?实际上,委托在编译的时候确实会编译成类。因为所定义的委托类型在C#中属于引用类型,也是一个类,所以在任何可以声明类的地方都可以声明委托类型。更多的内容将在下面讲述,现在,请看看这个案例的完整代码:

using System;

using System.Collections.Generic;

using System.Text;

namespace Delegate {

//定义委托,它定义了可以代表的方法的类型

public delegate void GreetingDelegate(string name);

class Program {

private static void EnglishGreeting(string name) {

Console.WriteLine("Morning, " + name);

}

private static void ChineseGreeting(string name) {

Console.WriteLine("早上好, " + name);

}

//注意此方法,它接受一个GreetingDelegate类型的方法作为参数

private static void GreetPeople(string name, GreetingDelegate MakeGreeting) {

MakeGreeting(name);

}

static void Main(string[] args) {

GreetPeople("Jimmy Zhang", EnglishGreeting);

GreetPeople("张子阳", ChineseGreeting);

Console.ReadKey();

}

}

}

输出如下:

Morning, Jimmy Zhang

早上好, 张子阳

下面我们介绍委托的常用的四种形式:

//delegate 匿名委托

Niming nm = delegate (string str)

{

Console.WriteLine("我是匿名委托" + str);

return str.ToUpper();

};

Console.WriteLine(nm("nihao"));

nm = delegate (string str)

{

Console.WriteLine("我是匿名委托" + str);

return str.ToLower();

};

Console.WriteLine(nm("NiHAO"));

//lambda 表达式

//格式:(参数) =>{要执行的方法体;};

Test test = (int a) => { a *= 10; Console.WriteLine(a); };

test(2);

GreetingDelegate gd = (string name) =>

{

Person.EnglishSpeek(name);

Person.ChineseSpeek(name);

Person.EnglishSpeek(name);

};

gd("小丽");

//Func 委托 最后一个为返回值类型out

Func s = delegate (string str1, string str2)

{

return str1 + str2;

};

Console.WriteLine(s("a", "b"));

//Action委托 不需要返回值

Action str = delegate (string str1, string str2)

{

Console.WriteLine(str1 + str2);

Person.EnglishSpeek(str1);

};

str("你好", "乔安");

最后,我们对委托做一个总结:

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

THE END  

声明:本站稿件版权均属中公教育优就业所有,未经许可不得擅自转载。

领取零基础自学IT资源

涉及方向有Java、Web前端、UI设计、软件测试、python等科目,内容包含学习路线、视频、源码等

点击申请领取资料

点击查看资料详情 

收起 


 相关推荐

问题解答专区
返回顶部