400-650-7353
您所在的位置:首頁(yè) > IT干貨資料 > unity > 【Unity基礎(chǔ)知識(shí)】委托和事件

【Unity基礎(chǔ)知識(shí)】委托和事件

  • 來(lái)源:Unity干貨資料
  • 2021-03-18 19:40:06
  • 閱讀()
  • 分享
  • 手機(jī)端入口

看了之前的文章,大家都知道Unity使用腳本最主流的語(yǔ)言就是C#語(yǔ)言。作為程序員小哥哥,平時(shí)經(jīng)常會(huì)聽(tīng)到C#語(yǔ)言中的委托和事件吧。我們今天重點(diǎn)來(lái)學(xué)習(xí)一下委托。

委托和事件各種項(xiàng)目的應(yīng)用非常廣泛,然而,較好地理解委托和事件對(duì)很多接觸C#時(shí)間不長(zhǎng)的人來(lái)說(shuō)并不容易。它們就像是一道檻兒,過(guò)了這個(gè)檻的人,覺(jué)得真是太容易了,而沒(méi)有過(guò)去的人每次見(jiàn)到委托和事件就覺(jué)得心里憋得慌,渾身不自在。本文中,將通過(guò)兩個(gè)案例由淺入深地講述什么是委托、為什么要使用委托以及事件的由來(lái)。

委托的關(guān)鍵字是delegate。也就是和int、string一樣,用delegate關(guān)鍵字來(lái)聲明一個(gè)委托類型。而委托的聲明方式和類卻完全不同,這是怎么一回事?實(shí)際上,委托在編譯的時(shí)候確實(shí)會(huì)編譯成類。因?yàn)樗x的委托類型在C#中屬于引用類型,也是一個(gè)類,所以在任何可以聲明類的地方都可以聲明委托類型。更多的內(nèi)容將在下面講述,現(xiàn)在,請(qǐng)看看這個(gè)案例的完整代碼:

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);

}

//注意此方法,它接受一個(gè)GreetingDelegate類型的方法作為參數(shù)

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

MakeGreeting(name);

}

static void Main(string[] args) {

GreetPeople("Jimmy Zhang", EnglishGreeting);

GreetPeople("張子陽(yáng)", ChineseGreeting);

Console.ReadKey();

}

}

}

輸出如下:

Morning, Jimmy Zhang

早上好, 張子陽(yáng)

下面我們介紹委托的常用的四種形式:

//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 表達(dá)式

//格式:(參數(shù)) =>{要執(zhí)行的方法體;};

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 委托 最后一個(gè)為返回值類型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("你好", "喬安");

最后,我們對(duì)委托做一個(gè)總結(jié):

委托是一個(gè)類,它定義了方法的類型,使得可以將方法當(dāng)作另一個(gè)方法的參數(shù)來(lái)進(jìn)行傳遞,這種將方法動(dòng)態(tài)地賦給參數(shù)的做法,可以避免在程序中大量使用If-Else(Switch)語(yǔ)句,同時(shí)使得程序具有更好的可擴(kuò)展性。

文章“【Unity基礎(chǔ)知識(shí)】委托和事件”已幫助

>>本文地址:http://liujunjsxg.cn/zhuanye/2021/67987.html

THE END  

聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

1 您的年齡

2 您的學(xué)歷

3 您更想做哪個(gè)方向的工作?

獲取測(cè)試結(jié)果
  • 大前端大前端
  • 大數(shù)據(jù)大數(shù)據(jù)
  • 互聯(lián)網(wǎng)營(yíng)銷互聯(lián)網(wǎng)營(yíng)銷
  • JavaJava
  • Linux云計(jì)算Linux
  • Python+人工智能Python
  • 嵌入式物聯(lián)網(wǎng)嵌入式
  • 全域電商運(yùn)營(yíng)全域電商運(yùn)營(yíng)
  • 軟件測(cè)試軟件測(cè)試
  • 室內(nèi)設(shè)計(jì)室內(nèi)設(shè)計(jì)
  • 平面設(shè)計(jì)平面設(shè)計(jì)
  • 電商設(shè)計(jì)電商設(shè)計(jì)
  • 網(wǎng)頁(yè)設(shè)計(jì)網(wǎng)頁(yè)設(shè)計(jì)
  • 全鏈路UI/UE設(shè)計(jì)UI設(shè)計(jì)
  • VR/AR游戲開(kāi)發(fā)VR/AR
  • 網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全
  • 新媒體與短視頻運(yùn)營(yíng)新媒體
  • 直播帶貨直播帶貨
  • 智能機(jī)器人軟件開(kāi)發(fā)智能機(jī)器人
 

快速通道fast track

近期開(kāi)班時(shí)間TIME