C# 中如何利用lambda實(shí)現(xiàn)委托事件的掛接
委托定義如下:
public class SocketSp
{
public delegate void ReceiveCompleted(byte[] receiveBuffer, int receiveTotalLen,Exception ex);
public ReceiveCompleted receiveCompleted;
}
掛接方定義如下
public class LinkOuter
{
SocketSp linkOuterSocket = new SocketSp();
private void test(Socket requestHandleSocket)
{
//此處要掛接 linkOuterSocket.receiveCompleted 事件,同時(shí)想將參數(shù)requestHandleSocket傳入,以便后續(xù)處理。
}
}
第一個(gè)想法是利用delegate,但是失敗了。因?yàn)殡m然掛接上去了,委托傳進(jìn)的參數(shù)丟了,無(wú)法進(jìn)行后續(xù)操作。
private void test(Socket requestHandleSocket)
{
linkOuterSocket.receiveCompleted += delegate {
//To do
};
}
第二個(gè)想法是利用Action,結(jié)果也失敗了。IDE提示委托Action未采用3個(gè)參數(shù)。
private void test(Socket requestHandleSocket)
{
linkOuterSocket.receiveCompleted += (Action)((outerReceiveBuffer, totalLen, ex) => {
//To do
});
}
第三個(gè)想法是利用lambda表達(dá)式,先與委托掛接,同時(shí)利用局部變量的調(diào)用,來(lái)實(shí)現(xiàn)參數(shù)傳遞到sendResponse函數(shù)中,以便后續(xù)操作。
private void test(Socket requestHandleSocket)
{
linkOuterSocket.receiveCompleted += new SocketSp.ReceiveCompleted((outerReceiveBuffer,totalLen,ex) =>
{
byte[] realOuterReceiveBuffer = new byte[totalLen];
Array.Copy(outerReceiveBuffer, 0, realOuterReceiveBuffer, 0, totalLen);
sendResponse(requestHandleSocket, realOuterReceiveBuffer,"200 OK", "text/html");
});
}
最終用lambda表達(dá)式實(shí)現(xiàn)了。
- C#基礎(chǔ)之Lambda表達(dá)式用法實(shí)例教程
- C#中使用Lambda表達(dá)式自定義比較器實(shí)現(xiàn)兩個(gè)列表合并實(shí)例
- C# Lambda表達(dá)式用途深入理解
- C#中方法的直接調(diào)用、反射調(diào)用與Lambda表達(dá)式調(diào)用對(duì)比
- 初步認(rèn)識(shí)C#中的Lambda表達(dá)式和匿名方法
- C#3.0中Lambda表達(dá)式詳解
- C#用Lambda和委托實(shí)現(xiàn)模板方法
- 理解C#中的Lambda表達(dá)式
- C# Lambda 知識(shí)回顧
- 利用lambda表達(dá)式樹(shù)優(yōu)化反射詳解
相關(guān)文章
基于WPF實(shí)現(xiàn)繪制地鐵路線(xiàn)圖
經(jīng)常坐地鐵,卻不知道地鐵多少條線(xiàn)路?哪個(gè)站下車(chē)?本文就來(lái)帶大家利用WPF繪制深圳地鐵路線(xiàn)圖,從而帶大家掌握WPF在圖形繪制方面的一些知識(shí),希望對(duì)大家有所幫助2023-06-06Unity?數(shù)據(jù)存儲(chǔ)和讀取的方法匯總
這篇文章主要介紹了Unity?數(shù)據(jù)存儲(chǔ)和讀取的方法,本文通過(guò)四種方法在 Unity 中實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)和讀取方法的案例內(nèi)容,結(jié)合示例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下2022-10-10C# WinForm實(shí)現(xiàn)自動(dòng)更新程序的方法詳解
這一篇就著重寫(xiě)一下客戶(hù)端的代碼,客戶(hù)端主要實(shí)現(xiàn)的有:?jiǎn)?dòng)后檢測(cè)本地的xml文件,然后發(fā)送到服務(wù)器獲取需要更新的文件以及版本列表,感興趣的小伙伴可以了解一下2022-10-10C#網(wǎng)絡(luò)爬蟲(chóng)代碼分享 C#簡(jiǎn)單的爬取工具
這篇文章主要為大家詳細(xì)介紹了C#網(wǎng)絡(luò)爬蟲(chóng)代碼,教大家如何制作了簡(jiǎn)單的爬取工具,感興趣的小伙伴們可以參考一下2016-07-07npoi2.0將datatable對(duì)象轉(zhuǎn)換為excel2007示例
這篇文章主要介紹了npoi2.0將datatable對(duì)象轉(zhuǎn)換為excel2007示例的相關(guān)資料2014-04-04C#中實(shí)現(xiàn)Json序列化與反序列化的幾種方式
C#中實(shí)現(xiàn)Json的序列化與反序列化也算是個(gè)老話(huà)題,那么在這篇文章中我們將老話(huà)重提,本文中將會(huì)學(xué)到如何使用C#,來(lái)序列化對(duì)象成為Json格式的數(shù)據(jù),以及如何反序列化Json數(shù)據(jù)到對(duì)象。有需要的朋友們可以參考借鑒,下面來(lái)跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。2016-12-12C#實(shí)現(xiàn)自定義FTP操作封裝類(lèi)實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)自定義FTP操作封裝類(lèi),涉及C#操作FTP的連接、傳輸、下載等操作的實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-03-03C#實(shí)現(xiàn)判斷一個(gè)時(shí)間點(diǎn)是否位于給定時(shí)間區(qū)間的方法
這篇文章主要介紹了C#實(shí)現(xiàn)判斷一個(gè)時(shí)間點(diǎn)是否位于給定時(shí)間區(qū)間的方法,涉及C#針對(duì)時(shí)間的轉(zhuǎn)換與判定相關(guān)技巧,需要的朋友可以參考下2015-08-08