C#事件

  • 了解事件
  • 事件的应用
  • 深入理解事件
  • 事件的声明
  • 问题辨明

认识事件

事件是应用程序在执行过程中所关注的一些动作,但这些动作发生时,程序需要对其做出响应。事件的概念比较广泛,所有程序需要进行响应处理的动作都可以称为事件。如鼠标单击、键盘输入、计时器消息...

事件基于委托,为委托提供了一种发布/订阅机制,在.NET架构内外都可以看到事件。在Windows应用程序中,Button类提供了Click事件。这类事件就是委托,触发Click事件调用的处理程序需要得到定义,而其参数由委托类型定义。

事件机制是以消息为基础的,当特定的动作发生后会产生相应的消息,关注该事件的应用程序收到事件发生的消息,就会开始指定处理过程。

产生事件的类称为事件触发类,而处理事件的类则称为事件的接受类,用于处理特定事件的方法称为事件的处理方法。

事件的解释

Event 在《牛津词典》的解释是"a thing that happens, especially something important",表示能够发生的什么事情。

事件在C#中的角色,表示使对象或类具备通知能力的成员。

An event is a member that entables an object or class to provide notifications

  • 事件是一种使对象或类能够提供通知能力的成员
  • “对象拥有一个事件”表达的思想是“当事件发生的时候,对象有能力通知其他的对象。”。

事件的使用

用于对象或类间的动作协调与信息传递,如消息推送。

事件的原理

发布者和订阅者

很多程序都有一个共同的需求,即当一个特定的程序事件发生时,程序的其他部分可以得到该事件已经发生的通知。

发布者/订阅者模式(publisher/subscriber pattern)可以满足这种需求,在这种模式中,发布者类定义了一系列程序的其他部分可能感兴趣的事件。其他类可以注册,以便在这些事件发生时发布者可以通知它们。这些订阅者类通过向发布者提供一个方法来注册以获取通知。当事件发生时,发布者触发事件,然后执行订阅者提交的所有事件。

由订阅者提供的方法称为回调方法,因为发布者通过执行这些方法来“往回调用订阅者的方法”,还可将它们称为事件处理程序,因为它们是为处理事件而调用的代码。

事件的相关概念

  • 发布者(publisher) 发布某个事件的类或结构,其他类可以在该事件发生时得到通知。
  • 订阅者(subscriber)注册在事件发生时得到通知的类或结构
  • 事件处理程序(event handler) 由订阅者注册到事件的方法,在发布者触发事件时执行。事件处理程序方法可以定义在事件所在的类或结构中,也可以定义在不同的类或结构中。
  • 触发(raise)事件/调用(invoke)事件/触发(fire)事件 当事件触发时,所有注册到它的方法都回被依次调用。

事件很多部分与委托相似,实际上,事件就像是专门用于某种特殊用途的简单委托。委托和事件的行为之所以相似,是由充分理由的。事件包含了一个私有的委托。

事件模型Event Model有两个5

  • 发生至响应中的五个部分
    发生至响应的五个部分中,隐含着订阅关系。
    很多程序都有一个共同的需求,即当一个特定的程序事件发生时,程序的其他部分可以得到该事件已经发生的通知。

  • 发生至响应中的五个动作

事件的应用

  • 事件多用于桌面、手机等开发的客户端编程,因为这些程序经常是用户通过事件来驱动的。
  • 各种编程语言对事件机制的实现方式不尽相同
  • Java中没有事件这种成员,也没有委托这种数据类型。Java的事件是使用接口来实现的。
  • MVC、MVP、MVVM等模式是事件模式更加高级更加有效的玩法
  • 日常开发中,使用已有的事件的机会较多,自己声明事件的机会较少。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容

  • 事件 事件含义 事件由对象引发,通过我们提供的代码来处理。一个事件我们必须订阅(Subscribe)他们,订阅一个...
    天堂迈舞阅读 2,969评论 1 7
  • 事件 基本用法 关键字event,声明格式为: public event <委托类型> <事件对象> 事件的处理方...
    CieloSun阅读 2,018评论 0 0
  • 老伴又作画一组,猫鼠猴子趴趴狗。 神态各异静显动,小鸟欲飞猪欲走。
    蒙来客阅读 235评论 2 2
  • #代码 namespace WindowsFormsApplication4 { public partial c...
    头有点铁的愣头青阅读 225评论 0 0
  • 阳明先生心学我理解是“立志”学,立志于道德,立也,立志也。立志不是一朝一夕的事,三十而立,说的是要立志。在这个过程...
    正平安阅读 212评论 0 1