国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C# 中如何利用lambda實現(xiàn)委托事件的掛接

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傳入,以便后續(xù)處理。
      }
}


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

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表達式,先與委托掛接,同時利用局部變量的調用,來實現(xiàn)參數傳遞到sendResponse函數中,以便后續(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表達式實現(xiàn)了。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 惠安县| 易门县| 阆中市| 杭锦旗| 曲松县| 大新县| 巫溪县| 宁陵县| 香格里拉县| 大厂| 自治县| 丰城市| 罗山县| 洪泽县| 宣城市| 丰镇市| 扎囊县| 平潭县| 宁阳县| 开原市| 铁力市| 共和县| 通许县| 沙湾县| 定远县| 巴彦县| 盐源县| 天峻县| 涞水县| 钟山县| 阳城县| 修水县| 茶陵县| 电白县| 台湾省| 邮箱| 申扎县| 馆陶县| 长顺县| 香港| 洪洞县|