栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java或C#中的事件/代表

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java或C#中的事件/代表

(所有这些都是从C#角度来看的。)

我有一篇关于事件和代表之间区别的文章。这将更详细地介绍下面提到的所有内容。

基本上,我喜欢将事件视为属性,它是一对方法,仅此而已。一个事件具有添加/删除,而不是获取/设置-
意思是“添加此事件处理程序”和“删除此事件处理程序”。核心是所有事件。

C#还具有 类似于字段的事件 ,这是一种快捷方式:

 public event EventHandler Foo;

声明一个字段 一个事件,几乎没有什么添加/删除实现。在类中,指代是

Foo
指该字段。在课外,提到是
Foo
指事件。

基本思想是,事件通过传递委托(事件 处理程序 ),允许其他代码对其进行预订和取消预订。通常,订阅是通过创建一个新的多播委托来实现的,该委托包含 以前
的事件处理程序列表和新的事件处理程序列表。因此,如果将事件处理程序存储在名为的字段中

myEventHandlers
,则预订实现可能是:

myEventHandlers += value;

同样,取消订阅通常涉及在 没有 指定处理程序的 情况下 创建新的多播委托:

myEventHandlers -= value;

然后,当您想引发/触发事件时,只需调用该多播委托-通常进行无效检查,以避免在没有人订阅的情况下引发异常:

EventHandler handler = myEventHandlers;if (handler != null){    // You could pass in a different "sender" and "args" of course    handler(this, EventArgs.Empty);}

使用事件,订阅者彼此之间不了解,也无法自己发起事件(通常)。换句话说,这是一种封装模式,在语言和平台中都被赋予了地位。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/463791.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号