C# 中如何利用lambda实现委托事件的挂接
发布时间:2022-02-06 03:18:00
标签:C#,lambda,委托事件
委托定义如下:
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表达式实现了。


猜你喜欢
- ELK环境安装ELK是指Elasticsearch、Kibana、Logstash这三种服务搭建的日志收集系统,具体搭建方式可以参考《Spr
- 在常见的ORM框架中,大都提供了使用注解方式来实现entity与数据库的映射,这里简单地使用自定义注解与反射来生成可执行的sql语句。这是整
- Android ToggleButton 详解在Android的开发过程中,对于ToggleButton的使用频率也是相当的高的,下面我就来
- 摘要本文主要介绍基于SpringBoot定时任务ScheduledTaskRegistrar的动态扩展,实现定时任务的动态新增和删除。Sch
- 一、MySql实现分页查询的SQL语句 1、分页需求:客户端通过传递pageNo(页码),counter(每页显示的条数)两个参数去分页查询
- 如何从C#获取字符串中汉字的个数?C#中使用正则表达式来从字符串中判断出汉字,然后计数,从而得到字符串中的汉字个数。先看这段代码://首先引
- 序列化和反序列化Java是面向对象的语言,与其他语言进行交互(比如与前端js进行http通信),需要把对象转化成一种通用的格式比如json(
- 一、背景有时我们在做开发的时候需要记录每个任务执行时间,或者记录一段代码执行时间,最简单的方法就是打印当前时间与执行完时间的差值,一般我们检
- 代码:public DataTable TXTToDataTable(string fileName, string columnName)
- 本文实例讲述了Android编程实现启动界面的方法。分享给大家供大家参考,具体如下:最近在弄一个程序启动界面程序,在这里贴下代码。解释一下:
- 0.背景简介微软在 .NET 框架中提供了多种实用的线程同步手段,其中包括 monitor 类及 reader-writer锁。
- 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这是建造者模式的标准表达,不过看着让人迷惑,什么叫构建
- 以前用序列化都是一些方法需要才实现的,后来业务需求要深拷贝才去研究。参阅了别人博客得出一些总结。序列化是为了把Java对象转化为字节序列(字
- 题目描述在进行网络编程时,有时需要对局域网的所有主机进行遍历,为此需要获得内网的所以IP地址题目实现:获得内网的所有IP地址的小应用。解题思
- 在说struts2的线程安全之前,先说一下,什么是线程安全?这是一个网友讲的。如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会
- 其实这个http下载器的功能已经相当完善了,支持:限速、post投递和上传、自定义http header、设置user agent、设置ra
- 要求: * 对用户输入的每个字符的值进行加密,将解密后的字符串输出 * 对用户输入的已加密字符串进行解密并
- 1. Java中程序的逻辑控制语句1.1顺序结构顺序结构比较简单,按照代码书写的顺序一行一行执行1.2分支结构1.2.1 switch语句这
- 一、Java IO流1、概念在Java中,把不同的输入源 / 输出源(如:键盘、文件、网络链接等)抽象的表述为“流”(stream)通过 ”
- 一.使用MSScriptControl 到微软的网站上下载Windows Script Control,它是一个ActiveX(R) 控件,