国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C#中的匿名方法

2019-11-17 02:56:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

C#中的匿名方法

C#中的匿名方法是在C#2.0引入的,它終結(jié)了C#2.0之前版本聲明委托的唯一方法是使用命名方法的時(shí)代。雖然在 C# 3.0 及更高版本中,Lambda 表達(dá)式取代了匿名方法,作為編寫內(nèi)聯(lián)代碼的首選方式。但是,匿名方法的信息同樣也適用于 Lambda 表達(dá)式,可以說(shuō)Lambda 表達(dá)式就是匿名方法演變過(guò)來(lái)的,這點(diǎn)后續(xù)博文會(huì)講解推演的過(guò)程。我們可以使用匿名方法來(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)然其他的叫法流傳也甚廣,聽得懂就行了,沒(méi)必要糾結(jié)。

接下來(lái)說(shuō)說(shuō)匿名方法的寫法規(guī)則,先上例子:

delegate(int i) { return i > 0; }

它遵循這樣的格式書寫:delegate(形參表){方法體代碼},可以類比js中匿名函數(shù)的寫法來(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)置委托,后續(xù)博文會(huì)講)GetNewList()定義如下:

bool GetNewList(int i)    {         return i > 3;    }

以上是沒(méi)有使用匿名方法時(shí)的寫法,如果使用了匿名方法,你就會(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)開銷,這就是它的最大好處。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 吐鲁番市| 江川县| 龙海市| 广河县| 苍溪县| 襄垣县| 启东市| 萍乡市| 桐城市| 沂水县| 福鼎市| 麻阳| 炎陵县| 永胜县| 敦煌市| 铁岭县| 梅河口市| 滦南县| 奎屯市| 揭东县| 玉环县| 无锡市| 锦屏县| 抚顺市| 延川县| 望都县| 河南省| 荔波县| 汶川县| 陇西县| 墨竹工卡县| 无为县| 宜丰县| 萝北县| 南投市| 邵东县| 兴城市| 定南县| 长乐市| 永康市| 缙云县|