程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# 3.0特性 - 匿名方法和Lambda表達式(1)

C# 3.0特性 - 匿名方法和Lambda表達式(1)

編輯:關於C語言

在我們程序中,經常有這樣一些需求:

1. 需要一個臨時方法,這個方法只會使用一次,或者使用的很少。

2. 這個方法的方法體很短,以至於比方法聲明都短,寫起來實在沒勁(我將 其稱之為“一句話方法”)。

沒辦法,這樣的方法寫起來真是吃力不討好,比如一些按鈕事件處理中,有 些按鈕點擊就是彈出一個對話框,或者調用一下別的什麼方法。比如下面的代碼 :

this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click);
private void btnRefresh_Click(object sender, EventArgs e)
{
BindData();
}

這個”Refresh”按鈕就是做一下調用一下BindData()數據綁定的 方法,為此我們不得不寫一個新方法。好了,C# 2.0為我們提供了匿名方法:

this.btnRefresh.Click += delegate(object sender, EventArgs e) { BindData(); };

沒勁的代碼沒了。想知道這種寫法的幕後黑手麼?

其實編譯器還是在我們的後面干了一件龌龊的事情:它為我們產生了一個新 的方法,它只是表面上為我們節省了代碼。

private void b__0(object sender,EventArgs e)
{
  this.BindData();
}

看看這個編譯器產生的方法的名稱:

b_0,Test是這個匿名方法所放置的地方(因為這個按鈕的時間我是放在一個 Test方法裡的) 還有一點需要注意的是,如果這個匿名方法是在實例方法裡使用, 那麼編譯器為我們生成的幕後方法也是實例方法,否則就是靜態方法了。

是不是覺得匿名方法這東西很不錯,減少了很多代碼阿,但是匿名方法的使用 還並不人性化,什麼是人性化呢?比如你可以用自然的語言將程序代碼讀出來,這 樣才算人性化了.在.Net 2.0中System.Collections.Generic命名空間下List裡 有一些新增的方法。比如Find,如果使用匿名方法我們如何調用呢:

books.Find(delegate(Bookbook){return book.Price<50;});

代碼是很簡單,但是卻無法朗讀出來,來看看Lambda表達式的寫法:

books.Find(book=>book.Price<50);這個Lambda表達式就可以這樣閱 讀出來了:給你一本書,如果它的價格小於50則返回true。

好了,那我們就走進Lambda表達式吧:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved