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ù)丟了,無法進(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)用,來實(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)用對比
- 初步認(rèn)識C#中的Lambda表達(dá)式和匿名方法
- C#3.0中Lambda表達(dá)式詳解
- C#用Lambda和委托實(shí)現(xiàn)模板方法
- 理解C#中的Lambda表達(dá)式
- C# Lambda 知識回顧
- 利用lambda表達(dá)式樹優(yōu)化反射詳解
相關(guān)文章
C# WinForm實(shí)現(xiàn)自動更新程序的方法詳解
這一篇就著重寫一下客戶端的代碼,客戶端主要實(shí)現(xiàn)的有:啟動后檢測本地的xml文件,然后發(fā)送到服務(wù)器獲取需要更新的文件以及版本列表,感興趣的小伙伴可以了解一下2022-10-10C#網(wǎng)絡(luò)爬蟲代碼分享 C#簡單的爬取工具
這篇文章主要為大家詳細(xì)介紹了C#網(wǎng)絡(luò)爬蟲代碼,教大家如何制作了簡單的爬取工具,感興趣的小伙伴們可以參考一下2016-07-07npoi2.0將datatable對象轉(zhuǎn)換為excel2007示例
這篇文章主要介紹了npoi2.0將datatable對象轉(zhuǎn)換為excel2007示例的相關(guān)資料2014-04-04C#中實(shí)現(xiàn)Json序列化與反序列化的幾種方式
C#中實(shí)現(xiàn)Json的序列化與反序列化也算是個(gè)老話題,那么在這篇文章中我們將老話重提,本文中將會學(xué)到如何使用C#,來序列化對象成為Json格式的數(shù)據(jù),以及如何反序列化Json數(shù)據(jù)到對象。有需要的朋友們可以參考借鑒,下面來跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。2016-12-12C#實(shí)現(xiàn)自定義FTP操作封裝類實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)自定義FTP操作封裝類,涉及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#針對時(shí)間的轉(zhuǎn)換與判定相關(guān)技巧,需要的朋友可以參考下2015-08-08