400-650-7353

精品课程

您所在的位置:首页 > IT干货资料 > unity > 【Unity基础知识】委托和事件

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

看了之前的文章,大家都知道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)语句,同时使得程序具有更好的可扩展性。

课程好礼申请领取
您的姓名
您的电话
意向课程
 

中公优就业

官方QQ

扫描上方二维码或点击一键加群,免费领取价值599元网课,加群暗号:599。 一键加群

>>本文地址:
注:本站稿件未经许可不得转载,转载请保留出处及源文件地址。

推荐阅读

测一测
你适合学哪门IT技术?

1 您的年龄

2 您的学历

3 您更想做哪个方向的工作?

获取测试结果
 
课程资料、活动优惠 领取通道
 
 
网站地图 彩29彩票app下载 快乐彩票网站 cc彩票注册
申博太阳城注册 申博太阳娱乐 进入申博138 申博太阳娱乐城
彩客网游戏登入 四季彩票江苏快三 快乐彩票官网登入 优发娱乐客户端下载
五星彩票网游戏 五星彩票网官网 cc彩票游戏 58彩票网官方网
500万彩票网即时比分 500w彩票网官方网 彩29彩票网平台 58彩票网官网
900xsb.com 155TGP.COM 8ATSS.COM S6187.COM 988xsb.com
22TGP.COM 78XTD.COM DC957.COM 557XTD.COM 994sun.com
XSB1111.COM 999sbsg.com 157ib.com ib63.com 157cw.com
678XTD.COM 1112935.COM XSB887.COM 66TGP.COM 818XTD.COM