a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

C# 中如何利用lambda實現委托事件的掛接

2020-01-24 03:12:05
字體:
來源:轉載
供稿:網友

委托定義如下:

復制代碼 代碼如下:

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 事件,同時想將參數requestHandleSocket傳入,以便后續處理。
      }
}


第一個想法是利用delegate,但是失敗了。因為雖然掛接上去了,委托傳進的參數丟了,無法進行后續操作。
復制代碼 代碼如下:

private void test(Socket requestHandleSocket)
{
linkOuterSocket.receiveCompleted += delegate {
//To do
};
}

第二個想法是利用Action,結果也失敗了。IDE提示委托Action未采用3個參數。
復制代碼 代碼如下:

private void test(Socket requestHandleSocket)
{
linkOuterSocket.receiveCompleted += (Action)((outerReceiveBuffer, totalLen, ex) => {
//To do
});
}

第三個想法是利用lambda表達式,先與委托掛接,同時利用局部變量的調用,來實現參數傳遞到sendResponse函數中,以便后續操作。
復制代碼 代碼如下:

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表達式實現了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品毛片一区二区三区 | 在线不卡亚洲 | 国产精品欧美日韩在线观看 | 亚洲一区二区三区爽爽爽爽爽 | 国产精品免费观看 | 91精品在线观看入口 | 正在播放国产一区二区 | 成人在线视频播放 | 欧美一区二区三区在线视频 | 国产二区视频 | 日韩成人久久 | 中文字幕av免费 | 91中文字幕在线观看 | 国产精品综合一区二区 | 日本精品二区 | 超碰男人 | 中文字幕在线观看av | 五月婷婷六月香 | 成人亚洲精品久久久久软件 | 欧美性猛交一区二区三区精品 | 国产一二三区不卡 | 国产又黄又粗又爽的视频 | 亚洲一区在线视频 | 久久一日本道色综合久久 | 一本一道久久a久久精品综合蜜臀 | 精品国产91亚洲一区二区三区www | 中文日韩在线 | 国产中文字幕在线 | 欧美一区二区视频在线 | 日本在线一 | 亚洲国产精品第一区二区 | 欧美国产在线观看 | 成人在线视频观看 | 久久综合久久久 | 国产精品一区二区三区在线播放 | 国产精品国色综合久久 | 亚洲日本乱码在线观看 | 精品久久久一区 | www久久久 | 色综合一区 | 久久99国产精品 |