IT培訓(xùn)網(wǎng)
IT在線學(xué)習(xí)
看了之前的文章,大家都知道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è)委托類(lèi)型。而委托的聲明方式和類(lèi)卻完全不同,這是怎么一回事?實(shí)際上,委托在編譯的時(shí)候確實(shí)會(huì)編譯成類(lèi)。因?yàn)樗x的委托類(lèi)型在C#中屬于引用類(lèi)型,也是一個(gè)類(lèi),所以在任何可以聲明類(lèi)的地方都可以聲明委托類(lèi)型。更多的內(nèi)容將在下面講述,現(xiàn)在,請(qǐng)看看這個(gè)案例的完整代碼:
using System;
using System.Collections.Generic;
using System.Text;
namespace Delegate {
//定義委托,它定義了可以代表的方法的類(lèi)型
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類(lèi)型的方法作為參數(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è)為返回值類(lèi)型out
Func
{
return str1 + str2;
};
Console.WriteLine(s("a", "b"));
//Action委托 不需要返回值
Action
{
Console.WriteLine(str1 + str2);
Person.EnglishSpeek(str1);
};
str("你好", "喬安");
最后,我們對(duì)委托做一個(gè)總結(jié):
委托是一個(gè)類(lèi),它定義了方法的類(lèi)型,使得可以將方法當(dāng)作另一個(gè)方法的參數(shù)來(lái)進(jìn)行傳遞,這種將方法動(dòng)態(tài)地賦給參數(shù)的做法,可以避免在程序中大量使用If-Else(Switch)語(yǔ)句,同時(shí)使得程序具有更好的可擴(kuò)展性。
>>本文地址:http://www.yceu.cn/zhuanye/2021/67987.html
聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
1 您的年齡
2 您的學(xué)歷
3 您更想做哪個(gè)方向的工作?
07月15日Java
咨詢(xún)/試聽(tīng)07月15日Python+人工智能
咨詢(xún)/試聽(tīng)07月15日Web前端
咨詢(xún)/試聽(tīng)07月15日UI設(shè)計(jì)
咨詢(xún)/試聽(tīng)07月15日大數(shù)據(jù)
咨詢(xún)/試聽(tīng)07月15日Java
咨詢(xún)/試聽(tīng)07月15日Python+人工智能
咨詢(xún)/試聽(tīng)07月15日Web前端
咨詢(xún)/試聽(tīng)07月15日UI設(shè)計(jì)
咨詢(xún)/試聽(tīng)07月15日大數(shù)據(jù)
咨詢(xún)/試聽(tīng)