C# 中如何利用lambda实现委托事件的挂接

时间:2022-02-06 03:18:00 

委托定义如下:


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表达式实现了。

标签:C#,lambda,委托事件
0
投稿

猜你喜欢

  • Java基础学习之ArrayList类概述与常用方法

    2023-03-13 02:15:24
  • Java序列化和反序列化示例介绍

    2023-11-25 04:24:26
  • Spring MVC请求参数的深入解析

    2021-11-26 22:55:25
  • java虚拟机原理:类加载过程详解

    2023-08-09 11:35:37
  • C# 字符串与unicode互相转换实战案例

    2023-12-23 09:29:54
  • 25个最好的免费Eclipse插件

    2021-09-21 10:56:24
  • mybatis-plus生成mapper扩展文件的方法

    2023-08-10 07:29:05
  • Java 数据结构与算法系列精讲之字符串暴力匹配

    2021-10-06 05:43:27
  • Java VisualVM监控远程JVM(详解)

    2022-07-10 15:59:15
  • Java的JDBC中Statement与CallableStatement对象实例

    2022-11-14 17:22:08
  • 详解java nio中的select和channel

    2021-08-09 19:17:39
  • 用Java实现简单画板功能

    2023-01-19 08:17:10
  • Java编程泛型限定代码分享

    2023-11-09 17:46:32
  • Java一个简单的红包生成算法

    2023-12-12 10:56:50
  • Spring+Vue整合UEditor富文本实现图片附件上传的方法

    2022-09-27 10:36:13
  • C#中利用代理实现观察者设计模式详解

    2022-02-25 17:49:36
  • 判断List和Map是否相等并合并List中相同的Map

    2022-12-29 02:11:10
  • SpringBoot+MQTT+apollo实现订阅发布功能的示例

    2021-08-30 22:36:46
  • 用C#实现启动另一程序的方法实例

    2023-06-20 12:05:43
  • java实现波雷费密码算法示例代码

    2022-09-14 23:30:28
  • asp之家 软件编程 m.aspxhome.com