C 強化系列文章四 匿名方法的使用

2021-04-18 09:40:51 字數 1750 閱讀 4285

匿名方法相信很多人都聽過,它是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.區分區域性變數 全域性變數和類中的資料成員 區域性變數 在乙個函式內定義的變數,作用域是在函式體內生效,在函式內直接使用。全域性變數 在函式外和類體外定義的變數,作用域是從定義點一直到程式結束。注意 全域性變數只可以在類外生效而不能在類內生效。類的...