Delegate总结

2023-11-10

关于Delegate已经写了很多,现总结如下。

一) 一条线是观察delegate从.net framework 1.1 到目前为止4.5的变迁;

例如如果你用delegate来模拟事件,你需要自己:

          // Add member to the invocation list.

       public void OnAboutToBlow(AboutToBlow clientMethod)

       { almostDeadList += clientMethod; }

而在.NET Framework 1.1中你可以:

         //服务端代码:

         publicclass Car

   {

       // This delegate works in conjunction with the

       // Car’s events.

       public delegate voidCarEventHandler(string msg);

 

       // This car can send these events.

       public event CarEventHandler Exploded;

       public event CarEventHandler AboutToBlow;

          }

          //客户端代码:

     // Register event handlers.         

    c1.AboutToBlow +=new Car.CarEventHandler(CarIsAlmostDoomed);

 

而在.NET Framework 2.0中:

    //服务端代码:

        public classCarPlus

   {

       public event EventHandler<CarEventArgs> Exploded;

       public event EventHandler<CarEventArgs> AboutToBlow;

          }

         //客户端代码:

         // Make a car as usual.

   CarPlus c1 =new CarPlus("SlugBug", 100, 10);

   // Register event handlers.         

   c1.AboutToBlow += CarIsAlmostDoomed;

   c1.AboutToBlow += CarAboutToBlow;

 

而在.NET Framework 3.0之后:

可以仔细体会Delegate与泛型,lambda表达式等的结合。Action, Func等的引入。Asynchronous Delegate等。

二)一条线是理解其意图(Intention)和几种应用的典型模式。

无论是对Document还是对Car的处理(这些都是书上列举的经典示例用来说明Delegate),会发现一个共同点。尽管有许多不同的方法,例如WashCar, RotateTire等,但它们的signature是一样的,有一个唯一的参数即Car。这里需要处理两个变化,一是这些类似的方法可能会增加;一是用户使用的时候对这些方法是任意组合的。之前的类图包括Garage, Car, 现在引入委托后变为Garage, Car, ServiceDepartment。仔细体会这个模式是如何处理前面所述的两个变化的。方法增加用户可以通过扩充ServiceDepartment来实现,客户端调用时的任意性则用Delegate来实现。

另一个应用delegate的典型场景是Strategy pattern。例如排序,用户通常需要根据实际情况动态选择排序算法,这就需要排序逻辑isolate出来。这个在LINQ中应用及其广泛,例如where子句中的predicate谓词逻辑都需要隔离出来由用户决定。

还有一个典型场景就是用Delegate来模拟Event。事实上这个场景都可以用event来实现,而将所需传递的信息封装在EventArgs中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delegate总结 的相关文章

  • winform程序:newtonsoft json 序列化时出现 “unterminated string. Excepted delimiter..."

    在写一个winform程序时出现上述错误 开始以为newtonsoft 第三方插件对读取的字符串的长度有限制 也搜索没有用 后来通过读取文件 发现可以序列化 排除newtonsoft插件的问题 后来确定是winform的textbox控件的
  • Blazor 路由及导航开发指南

    翻译自 Waqas Anwar 2021年4月2日的文章 A Developer s Guide To Blazor Routing and Navigation 1 检查传入的请求 URL 并将它们导航到对应的视图或页面是每个单页应用程序
  • [零基础学C#] C#从小白到菜鸟 第5期 - 判断

    前言 上一期我们学习了常量和运算符 这一期我们就要开始学习语句块了 简单啊 本来这一期想讲判断和循环的 但是一起讲的话太多了 所以本期就只讲判断吧 学习编程一定要多学多练 多敲出来才能记得更牢 同样 本期的资源下载在底部 大家在学习过程中有
  • Blazor 模板化组件开发指南

    翻译自 Waqas Anwar 2021年4月15日的文章 A Developer s Guide To Blazor Templated Components 1 在我之前的一篇文章 Blazor 组件入门指南中 我介绍了组件参数 并向您
  • winform 中 Devexpress Charts动态添加数据

    参考 Devexpress Charts动态添加数据 https www cnblogs com zhangruisoldier p 4226950 html DevExpress 图表控件 ChartControl 动态绑定数据 http
  • csharp: 用Enterprise Library对象实体绑定数据

    Enterprise Library https msdn microsoft com en us library ff648951 aspx
  • 在wpf中利用异步lambda编程,模拟数据库连接,防止界面假死

    参考 图解C 第20章异步编程第五节程序 解决在wpf中连接数据库 界面假死问题 public partial class MainWindow Window private bool isConnected false public Ma
  • 一行代码去掉Devexpress弹窗

    使用的是 net hook方法 使用代码 using System using System Windows Forms namespace AlexDevexpressToolTest static class Program
  • ABP模块系统学习及使用

    ABP模块系统简介 参考 ABP中配置的注册和初始化 ABP模块系统 ABP 源码解析 一 ABP启动 ABP框架提供了创建和组装模块的基础 一个模块能够依赖于另一个模块 在通常情况下 一个程序集就可以看成是一个模块 在ABP框架中 一个模
  • C#判断是否是以管理员权限允许当前应用

    private static bool CheckForAdminRights string path Path Combine Environment GetFolderPath Environment SpecialFolder Win
  • Delegate总结

    关于Delegate已经写了很多 现总结如下 一 一条线是观察delegate从 net framework 1 1 到目前为止4 5的变迁 例如如果你用delegate来模拟事件 你需要自己 Add member to the invoc
  • Convert vs Cast

    Convert采用的是银行的舍入原则 而不是Cast的截取原则 Convert的四舍六入五留双规则 为了避免四舍五入规则造成的结果偏高 误差偏大的现象出现 一般采用四舍六入五留双规则 Banker s Rounding 四舍六入五留双应该改
  • Ado.Net总结

    ADO NET总结 ADO NET 是在 NET 平台上访问数据库的组件 它是以 ODBC Open Database Connectivity 技术的方式来访问数据库的一种技术 ADO NET常用命名空间 命名空间 数据提供程序 Syst
  • ASP.NET Core WebAPI学习-6

    ASP NET Core WebAPI学习 1 ASP NET Core WebAPI学习 2 ASP NET Core WebAPI学习 3 ASP NET Core WebAPI学习 4 ASP NET Core WebAPI学习 5
  • 在winform中屏蔽双击最大化或最小化窗体(C#实现),禁用任务管理器结束程序

    在需要屏蔽双击窗体最大化 最小化 关闭 拖拽窗体中写入以下代码 可以根据需要取舍代码 protected override void WndProc ref Message m if m Msg 0x112 switch int m WPa
  • Ado.net批量插入数据

    采用的是SqlBulkCopy方法 数据库是sql server 示例代码地址 https gitee com Alexander360 LearnAdoNet SqlBulkCopy批量插入的方法如下 包括list转datatable方法
  • ASP.NET Core WebAPI学习-1

    Web API学习 ASP NET Core WebAPI学习 1 ASP NET Core WebAPI学习 2 ASP NET Core WebAPI学习 3 ASP NET Core WebAPI学习 4 ASP NET Core W
  • Ado.net总结-Command(指挥官)

    Command 概述 在 System Data SqlClient 命名空间下 对应的 Command 类为 SqlCommand 在创建 SqlCommand 实例前必须已经创建了与数据库的连接 SqlCommand 类中常用的构造方法
  • C# 学习笔记

    不再是学生了 成了社畜了 公司主要技术栈是C 大一时候学C 学的很迷糊 总要重新学一下 入职已经20天了 也开始上手简单增删改查了 记录了一些C 相关的东西 只是还没有系统整理 WinForm 控件命名规范 ADO NET 连接数据库 Co
  • ASP.NET Core WebAPI学习-4

    ASP NET Core WebAPI学习 1 ASP NET Core WebAPI学习 2 ASP NET Core WebAPI学习 3 ASP NET Core WebAPI学习 4 ASP NET Core WebAPI学习 5

随机推荐

  • vue中实现微信公众号支付

    最近做项目遇到微信支付 根据项目需求使用了微信h5支付 大概的流程介绍 1 配置微信公众号 2 静默授权 获取路径中code 3 根据code拿到openid 4 根据openid获取prepay id 5 获取支付签名 6 调起支付功能
  • C++查找子串string.find()与string::npos

    string find string str abc string subStr1 bc string subStr2 cd str find subStr1 返回1 第一个匹配的下标 str find subStr2 返回string n
  • python 初始化列表的四种方法

    这里以 初始化大小为20个元素的列表 每个元素初始化为0 来举例说明 方法一 使用for循环和append 创建一个空的列表 使用append 方法通过f or循环n次 来将元素添加到列表中 arr for i in range 20 ar
  • 13-2 静态链接库的构建和使用

    1 静态链接库与动态链接库 程序编译时发生的动作称为静态行为 程序运行时发生的动作称为动态行为 故链接共分为两种 静态链接和动态链接 目前来看 链接使用的原因在于 主程序文件执行时需要引入头文件 执行外部函数 而引入头文件时 在编译阶段确定
  • pytorch loss.backward问题:RuntimeError: element 0 of tensors does not require grad and does not have a

    最近遇到了一个问题 在pytorch定义模型 训练过程中 反向传播时 loss backward 在上面这个未知报错 RuntimeError element 0 of tensors does not require grad and d
  • ssd检测坏块工具_如何看SSD还能用多久 固态硬盘寿命如何检测【详细介绍】

    理论上来说 固态硬盘的寿命要比机械硬盘短 不过SSD抗震性强 实际运用寿命不一定比HDD差 不过 固态硬盘一旦破坏很难维修 数据无法向机械硬盘那样 可以较为容易的恢复 因此在运用中 很多用户都会担心固态硬盘的运用寿命问题 那么 怎么看SSD
  • Quartus II软件添加设备

    文章目录 前言 一 前期准备 二 进入网站并下载对应的 qdz文件 1 先进入Intel主页并登录账号 2 找到下载地址 Quartus软件中添加设备 前言 最近为了调试Cyclone V系列的一个FPGA 安装了Quartus II 17
  • 服务器安装系统一直打圈,服务器宕机的造成原因和解决方法介绍

    服务器宕机原因是什么 怎么解决 服务器宕机是什么原因造成的 服务器宕机它的解决方法是什么 服务器宕机的造成原因和解决方法介绍 随着如今互联网信息化时代的不断发展 数据存储和传输在各种网络科技面前也显得越来越重要 选择一款好用的服务器愈发重要
  • matlab中使用bp神经网络完成分类问题

    训练集 27 2500矩阵 训练集有2500个样本 每个样本27个属性 矩阵的每一列表示一个样本集 标签 30 2500矩阵 对应2500个标签 30类 若为该类 则该类数字为1 其余为零 例 1 0 0 0 四类中的类一 神经网络训练 l
  • 具体数学第二版第一章习题(1)

    1 当 n 2 时 区间 2 n 1 为空 所以当 n 2 时不能证明2匹马颜色相同 2 三根柱子ABC 假设 n 个盘子的答案为 f n 最后一个盘子一定是A gt C gt B 所以整个过程分为5步 1 将上面 n 1 个盘子从A gt
  • 前端vue中箭头函数省略return的写法之详细讲解

    1 什么括号都不用的情况 a b gt return a b 简化 a b gt a b 2 使用 的情况下 let arr arr map item gt return h1 科科 h1 简化 arr map item gt h1 科科
  • The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class fi

    今天在家编写代码的时候 提示如下错误信息 The type java util Map Entry cannot be resolved It is indirectly referenced from required class fil
  • 【Python】如何根据时间序列数据提取星期几的信息?(如2023-04-05提取为Wednesday)

    一 问题描述 在Python中 可以使用datetime模块来处理日期和时间数据 并从中提取星期几 以下是一个示例代码 import datetime 定义一个日期字符串 date string 2023 04 05 将日期字符串转换为日期
  • 关键路径求法

    关键路径概念 在无回路的有向网络中 假设只有一个入度为0的顶点 称为源点 和一个出度为0的顶点 称为汇点 则从源点到汇点之间的最长的路径称为关键路径 AOE网 无回路有向网络可以用来表示一个包含多项活动的工程计划 有向边表示一项活动 边上的
  • 请教100位行业专家后,我总结出第三方支付“断直连”的8大疑问!

    2018年4月11日 央行行长易纲在博鳌亚洲论坛上表示 中国的第三方支付是走在世界前列的 但行业在发展过程中也出现了一些风险 如何在有效防范风险的同时鼓励竞争 鼓励创新 这是一个挺难解的题目 要做好平衡 断直连 监管细则已经落地 市场格局和
  • mysql 配置多个数据库连接_SpringBoot和Mybatis配置多数据源连接多个数据库

    目前业界操作数据库的框架一般是 Mybatis 但在很多业务场景下 我们需要在一个工程里配置多个数据源来实现业务逻辑 在SpringBoot中也可以实现多数据源并配合Mybatis框架编写xml文件来执行SQL 在SpringBoot中 配
  • 浅谈ChatGPT在一个IT运维人眼中的日常使用场景

    前言 其实AI的概念已经存在了十多年 包括在运维领域 也从传统运维演化到了所有AIOps的概念 但一直以来对当前的AI并不是太看好 始终觉得当前的AI只是停留在 撞库 从海量的库里去匹配关键字触发语句 所谓的 小爱同学 小度小度 包括Sir
  • 高内聚与低耦合实现小记

    总所周知 实际软件开发中要实现高内聚 低耦合的设计原则 c语言和c 不同 c语言面向过程 c 面向对象 真正的项目中 要对业务升级 原来的业务函数需要保留 要保证老的功能继续维持 不能直接删除 这时候 c语言面向过程 通常使用回调的方法 c
  • 为什么面试狂问Redis,阿里面试官把我问到哑口无言…

    Redis在国内各大公司都很热门 比如新浪 阿里 腾讯 百度 美团 小米等 Redis也是大厂面试最爱问的 尤其是Redis客户端 Redis高级功能 Redis持久化和开发运维常用问题探讨 Redis复制的原理和优化策略 Redis分布式
  • Delegate总结

    关于Delegate已经写了很多 现总结如下 一 一条线是观察delegate从 net framework 1 1 到目前为止4 5的变迁 例如如果你用delegate来模拟事件 你需要自己 Add member to the invoc