匿名方法相信很多人都聽過,它是c#2.0的乙個新特性,顧名思義,匿名方法就是沒有名稱的方法。那麼在c#中的匿名方法有哪些好處,在c#中如何使用呢?
匿名方法最明顯的好處就是可以降低另寫乙個方法的工作量,另外乙個好處就是可以訪問呼叫者的變數,降低傳引數的複雜度,下面就通過一些使用例子來具體看看。
1、在事件中使用匿名方法
下面是乙個定時器的小例子,我們常規的寫法如下:
常規寫法
class eventtest
void timerstimer_elapsed(object sender, system.timers.elapsedeventargs e) }
對於事件的處理我們需要單獨寫乙個方法timerstimer_elapsed,那麼如果使用匿名方法,就可以省掉這個方法的定義,如下所示:
class eventtest
; console.readline();
} }
也就是把方法的實現直接寫在內部。
2、在我們自己的**中使用匿名方法
常規寫法
class delegatetest
private void test2(convert convert, string strtext)
public string converta(string strtext)
public string convertb(string strtext)
public string convertc(string strtext)
}我們的例子中有三種規則,那麼就要定義三個方法,如果使用匿名方法的話,**就會很簡單:
class delegatetest
, strtext);
test2(delegate(string strtext2)
, strtext);
test2(delegate(string strtext2)
, strtext);
console.readline();
} private void test2(convert convert, string strtext) }
3、優化例子2,不再傳遞引數
在例子2中我們是把引數傳到你們方法內部的,其實在匿名方法內部可以直接取得當前呼叫者的變數,節省了傳遞引數的**量:
class anontest
); test2(delegate()
); test2(delegate()
); console.readline();
} private void test2(convert convert)
}這樣一來,**是不是看起來很整潔:)
當然**雖然看起來很少,實際上編譯器在編譯時還是會生成其他方法的。也就是說匿名方法可以減少**量,節省開發時間,但是對於效能方法沒有什麼提公升的。
我們通過il da**工具可以檢視一下anontest類編譯後的**,會發現增加乙個新類,在這個類裡面生成了三個方法和乙個同名的strtext變數:
然後在test方法中會呼叫這些新生成的方法,test如下所示:
.method public hidebysig instance void test() cil managed
// end of method anontest::test
本文**
C 強化系列文章
使用.net開發已經有一段時間了,但是對於一些基礎性的東西還是有點模糊,有一種似是而非的感覺。在此整理一下c 中的一些基礎知識以及一些可能平時不怎麼注意到的知識 本系列會不斷更新 1 c 強化系列文章一 viewstate使用兼談序列化 2 c 強化系列文章二 在c 中使用鉤子 3 c 強化系列文章...
C 強化系列文章
使用.net開發已經有一段時間了,但是對於一些基礎性的東西還是有點模糊,有一種似是而非的感覺。在此整理一下c 中的一些基礎知識以及一些可能平時不怎麼注意到的知識 本系列會不斷更新 1 c 強化系列文章一 viewstate使用兼談序列化 2 c 強化系列文章二 在c 中使用鉤子 3 c 強化系列文章...
C 語言筆記系列之七 變數的作用域和使用方法
1.類的作用域 類名 資料成員 類名 成員函式 2.區分區域性變數 全域性變數和類中的資料成員 區域性變數 在乙個函式內定義的變數,作用域是在函式體內生效,在函式內直接使用。全域性變數 在函式外和類體外定義的變數,作用域是從定義點一直到程式結束。注意 全域性變數只可以在類外生效而不能在類內生效。類的...