看了之前的文章,大家都知道Unity使用腳本最主流的語言就是C#語言。作為程序員小哥哥,平時經常會聽到C#語言中的委托和事件吧。我們今天重點來學習一下委托。
委托和事件各種項目的應用非常廣泛,然而,較好地理解委托和事件對很多接觸C#時間不長的人來說并不容易。它們就像是一道檻兒,過了這個檻的人,覺得真是太容易了,而沒有過去的人每次見到委托和事件就覺得心里憋得慌,渾身不自在。本文中,將通過兩個案例由淺入深地講述什么是委托、為什么要使用委托以及事件的由來。
委托的關鍵字是delegate。也就是和int、string一樣,用delegate關鍵字來聲明一個委托類型。而委托的聲明方式和類卻完全不同,這是怎么一回事?實際上,委托在編譯的時候確實會編譯成類。因為所定義的委托類型在C#中屬于引用類型,也是一個類,所以在任何可以聲明類的地方都可以聲明委托類型。更多的內容將在下面講述,現(xiàn)在,請看看這個案例的完整代碼:
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類型的方法作為參數(shù)
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 表達式
//格式:(參數(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 委托 最后一個為返回值類型out
Func
{
return str1 + str2;
};
Console.WriteLine(s("a", "b"));
//Action委托 不需要返回值
Action
{
Console.WriteLine(str1 + str2);
Person.EnglishSpeek(str1);
};
str("你好", "喬安");
最后,我們對委托做一個總結:
委托是一個類,它定義了方法的類型,使得可以將方法當作另一個方法的參數(shù)來進行傳遞,這種將方法動態(tài)地賦給參數(shù)的做法,可以避免在程序中大量使用If-Else(Switch)語句,同時使得程序具有更好的可擴展性。
>>本文地址:http://www.yiyunku.cn/zhuanye/2021/67987.html
聲明:本站稿件版權均屬中公教育優(yōu)就業(yè)所有,未經許可不得擅自轉載。
1 您的年齡
2 您的學歷
3 您更想做哪個方向的工作?