public delegate void DGCameraOperator(Branch branch);public event DGCameraOperator OpenCamera;public event DGCameraOperator CloseCamera;

最近写代码的时候,遇到了委托前面加了个event关键字,很是奇怪。

上网搜了一下,得到的结论如下。

event可以看成一种更高级的delegate,表象上看,区别就是在于赋值。

在非声明类中,可以通过new或者+=(-=)去给delegate赋值。但event只能通过+=(-=)去赋值。

对此的解释如下

Event提供了更严格的封装访问控制,其目的是为了防止其他类破坏委托的多播链,故不允许在声明事件的类外初始化或调用.

做个比喻,送牛奶的工作人员有一个列表记录着哪家定了牛奶。

如果你想订牛奶,你要做的是在列表中,加上你的姓名和地址。不想定,就把这个地址划去。

而不是重新自己写一张列表去让工人去送,如果这样的话,你虽然能喝上牛奶,但是之前订牛奶的人就要空着肚子了。

这时你要用的是event,如果要用delegate就需要额外做很多的逻辑限制,而这些限制,正是event干的活。

delegate与event的区别相关推荐

  1. C#中的delegate和event作用及区别

    Delegate delegate是C#中很重要的语法. 委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用. 声明了delegate的属性都会继承自Delegate类. 使用单播委托类 ...

  2. c# 带返回值的action_C#知识点讲解之C#delegate、event、Action、EventHandler的使用和区别...

    今天来讲一讲<C#delegate.event.Action.EventHandler的使用和区别> 目录 所以,event应运而生 所以,EventHandler应运而生 所以,Acti ...

  3. Delegate成员变量和Event的区别

    上周五有同事问了我一个问题:Delegate和Event有什么区别?具体来说在设计一个类的时候,声明一个事件(Event)和声明一个Delegate类型的成员变量有啥区别. 我的第一反应是没啥区别,虽 ...

  4. c#的delegate和event

    delegate是什么 委托(delegate) 是存有对某个方法的引用的一种引用类型变量,引用可在运行时被改变.如果不好理解,可以把委托理解成为函数指针,但它们是有区别的. delegate和C++ ...

  5. C#中的delegate和event (转)

    C#中的delegate和event 在基于Windows平台的程序设计中,事件(event)是一个很重要的概念.因为在几乎所有的Windows应用程序中,都会涉及大量的异步调用,比如响应点击按钮.处 ...

  6. C# delegate、event、Action、Func使用案例解析

    C# 中 delegate.event.Action.Func使用案例解析 一:delegate与event配合使用 public static class Evt_Test{public stati ...

  7. C#中Delegate和Event以及它们的区别(转载)

    一.Delegate委托可以理解为一个方法签名. 可以将方法作为另外一个方法的参数带入其中进行运算.在C#中我们有三种方式去创建委托,分别如下: public delegate void Print( ...

  8. C#中Delegate和Event以及它们的区别

    一.Delegate委托可以理解为一个方法签名. 可以将方法作为另外一个方法的参数带入其中进行运算.在C#中我们有三种方式去创建委托,分别如下: public delegate void Print( ...

  9. C#delegate、event、Action、EventHandler 的使用和区别

    小故事讲解这四位的前世今生 曾经.Net大佬只有一个Delegete(委托),别人想用委托的时候,必须得用delegate关键 字来定义一个委托,就像这样 1 //定义一个无返回值的,带一个int参数 ...

最新文章

  1. 在windows中设置程序运行的cpu
  2. Go: 字符串比较的三种方法
  3. 深入解析Windows系统两大进程
  4. qmediaplayer获取流类型_Android MediaPlayer类详解
  5. 三菱a系列motion软体_三菱M70A/64SM重要功能比较
  6. c/s三层结构信息系统的三个层次_如何使用ABP框架(2)三层架构与领域驱动设计的对比...
  7. mysql语言翻译_SQL语句翻译成MYSQL查询
  8. 【bzoj1194】 HNOI2006—潘多拉的盒子
  9. 在一个公司,谁有业绩,谁就有说话权
  10. 多元统计分析matlab,matlab与应用多元统计分析..doc
  11. cmd 卸载mysql_彻底卸载MySQL图文教程
  12. 计算机操作系统(一)——计算机操作系统的概念
  13. mysql binlog 回滚_Mysql误操作后利用binlog2sql快速回滚的方法详解
  14. 2019杭电多校6,E.Snowy Smile(线段树维护子段和)
  15. 实现两直角坐标系转换
  16. 系统集成项目管理工程师对入户的帮助有多大?
  17. 练习4.圆中四只鸭子在同一个半圆的概率——MATLAB
  18. CSS3动画特效详解
  19. 常见Oracle错误都在这了: ORA-00257/ORA-00313/ORA-28000/ORA-28000
  20. 如何区分网线是几类的_怎么能从网线上看出网线是几类线~请高手帮帮忙~先谢谢了...

热门文章

  1. java ArrayList 排序 遍历
  2. 数据库管理哪家强?Devart VS Navicat 360°全方位对比解析
  3. 2023年5月产品经理认证NPDP线上班,我要报名学习
  4. 设计模式的理解与举例
  5. python execjs 默认JScript切换使用Nodejs未生效
  6. 【异常】MyBatis-Plus提示报错XML fragments parsed from previous mappers does not contain value for xxx
  7. USB设备驱动学习记录
  8. 现在6岁的小朋友都开始学编程了……
  9. 如何在Windows 10上隐藏任务栏
  10. 关于RS485的DMA发送,以及EN使能脚的自动切换