C#中的匿名方法實(shí)例解析
本文較為詳細(xì)的講述了C#中的匿名方法,并附上實(shí)例加以說(shuō)明?,F(xiàn)將其分享給大家供大家參考之用。具體分析如下:
首先,C#中的匿名方法是在C#2.0引入的,它終結(jié)了C#2.0之前版本聲明委托的唯一方法是使用命名方法的時(shí)代。雖然在 C# 3.0 及更高版本中,Lambda 表達(dá)式取代了匿名方法,作為編寫(xiě)內(nèi)聯(lián)代碼的首選方式。但是,匿名方法的信息同樣也適用于 Lambda 表達(dá)式,可以說(shuō) Lambda 表達(dá)式就是匿名方法演變過(guò)來(lái)的。
我們可以使用匿名方法來(lái)忽略參數(shù)列表。 這意味著匿名方法可轉(zhuǎn)換為具有各種簽名的委托,而這對(duì)于 Lambda 表達(dá)式來(lái)說(shuō)是不可能的。 學(xué)好匿名方法,才能更加深刻地理解好 Lambda 表達(dá)式。
在說(shuō)匿名方法的使用之前,先來(lái)說(shuō)說(shuō)匿名方法的其他叫法。匿名方法也有人叫匿名委托、匿名函數(shù),雖然現(xiàn)在普遍通用,但是還是有點(diǎn)區(qū)別的。msdn官網(wǎng)上說(shuō):要將代碼塊傳遞為委托參數(shù),創(chuàng)建匿名方法則是唯一的方法。這里的匿名方法就是官方的說(shuō)法,而因?yàn)槟涿椒ň褪菫榱藢⒋a塊傳遞為委托參數(shù),因此也有人叫匿名委托,包括筆者也喜歡這種稱呼,我覺(jué)得這樣叫通俗易懂。至于匿名函數(shù),因?yàn)镃#中“方法”(Method)的概念有些語(yǔ)言叫“函數(shù)”(Function),因此匿名方法也被人叫做匿名函數(shù)。然而在msdn文檔介紹中匿名函數(shù)包括了Lambda 表達(dá)式和匿名方法,可以說(shuō)匿名函數(shù)是更高的一級(jí),所以說(shuō)最官方的叫法還是匿名方法,當(dāng)然其他的叫法流傳也甚廣,聽(tīng)得懂就行了,沒(méi)必要糾結(jié)。
接下來(lái)說(shuō)說(shuō)匿名方法的寫(xiě)法規(guī)則,先上例子:
delegate(int i) { return i > 0; }
它遵循這樣的格式書(shū)寫(xiě):
delegate(形參表){方法體代碼}
可以類比js中匿名函數(shù)的寫(xiě)法來(lái)記憶。
那么匿名方法運(yùn)用在哪里呢?怎么使用呢?當(dāng)你需要一個(gè)臨時(shí)方法,該方法使用次數(shù)極少或者你需要的這個(gè)方法的代碼很簡(jiǎn)短,那么你就可以使用匿名方法。給個(gè)簡(jiǎn)單的例子,如果需要在一個(gè)整型集合中篩選出符合條件的新集合,如下
List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 }; //假設(shè)需要從list集合中獲取大于3的所有元素以新集合返回 var newlist = newlist.FindAll(GetNewList);
GetNewList()為另外定義的和委托Predicate<T>具有同簽名的方法(Predicate<T>是系統(tǒng)內(nèi)置委托)
GetNewList()定義如下:
bool GetNewList(int i) { return i > 3; }
以上是沒(méi)有使用匿名方法時(shí)的寫(xiě)法,如果使用了匿名方法,你就會(huì)發(fā)現(xiàn)一切變得如此簡(jiǎn)便,
List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 }; var newlist = list.FindAll(delegate(int i) { return i > 3; });
通過(guò)對(duì)比,可以發(fā)現(xiàn)使用匿名方法能夠提供與先前命名方法相同的功能,但是它已經(jīng)不再需要一個(gè)在關(guān)聯(lián)到委托之前就明確創(chuàng)建的方法了,因此也減少了實(shí)例化委托所需的編碼系統(tǒng)開(kāi)銷,這就是它的最大好處。
相信本文所述對(duì)大家的C#程序設(shè)計(jì)有一定的借鑒價(jià)值。
相關(guān)文章
C#導(dǎo)航器Xpath與XPathNavigator類
這篇文章介紹了C#導(dǎo)航器Xpath與XPathNavigator類,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06C#實(shí)現(xiàn)接口base調(diào)用示例詳解
這篇文章主要為大家介紹了C#實(shí)現(xiàn)接口base調(diào)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06C# 字符串、數(shù)組和List的截取和轉(zhuǎn)換實(shí)例
下面小編就為大家分享一篇C# 字符串、數(shù)組和List的截取和轉(zhuǎn)換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-11-11c#獲取兩個(gè)特定字符之間的內(nèi)容并輸出的方法
今天小編就為大家分享一篇c#獲取兩個(gè)特定字符之間的內(nèi)容并輸出的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12