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