当前位置: 首页 > 面试题库 >

Java或C#中的事件/代表

宇文飞羽
2023-03-14
问题内容

我一直在尝试了解事件/代理,但对两者之间的关系感到困惑。我知道委托可以让您调用不同的功能,而无需知道正在调用什么特定功能。(例如:绘图功能需要接受与要绘图的不同功能的输入)。

但是我看不到在事件中如何使用委托。

有人可以构造一个简单的示例(伪代码,C#或Java)来说明与事件相关的代表的工作吗?

谢谢!


问题答案:

(所有这些都是从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);
}

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



 类似资料:
  • 在 C# 中,事件(Event)可以看作是用户的一系列操作,例如点击键盘的某个按键、单击/移动鼠标等,当事件发生时我们可以针对事件做出一系列的响应,例如退出程序、记录日志等等。C# 中线程之间的通信就是使用事件机制实现的。 事件需要在类中声明和触发,并通过委托与事件处理程序关联。事件可以分为发布器和订阅器两个部分,其中发布器是一个包含事件和委托的对象,事件和委托之间的联系也定义在这个类中,发布器类

  • 问题内容: 我刚刚创建了一个Java井字游戏,我想弄清楚在特定条件下按下Enter键后如何运行方法,下面是一个示例… 问题答案: 根据要在何处捕获“ enter”键,可以使用(在诸如文本组件或按钮之类的组件上)或将键绑定附加到组件上 这将取决于所关注的组件。

  • 问题内容: 我有一个带有以下标头的Base64编码的对象: 解码对象的最佳方法是什么?我需要去除第一行吗?另外,如果将其转换为字节数组(byte []),如何解压缩它? 谢谢! 我想我起初很miss。通过说标题是 我的意思是这是文件的第一行。因此,为了使用Java或C#库解码文件,是否需要删除这一行? 如果是这样,剥离第一行的最简单方法是什么? 问题答案: 我能够使用以下代码将.xfdl文档转换为

  • } 在另一边我有一个听众 类TrafficListener{ public static void watchNewTraffic() {//在出现新流量时执行某些操作}} 我发现有Observer和Observable,但我需要实现Observer的方法,我发现Propertychangelistener在我的情况下是没用的,因为我有静态方法

  • 问题内容: 在C#中,有一个文本框事件,如下所示 文本框内的文本更改后,将触发fooText_TextChanged中的代码。 Java等效于什么?或者如何在Java中实现与此类似的功能? 感谢您的任何反馈/帮助/建议。 问题答案: 对于Swing,如果希望在文本组件的文本更改 后 收到通知,则可以使用添加到JTextComponent的Document中的DocumentListener。例如,

  • 本文向大家介绍浅析javascript中的事件代理,包括了浅析javascript中的事件代理的使用技巧和注意事项,需要的朋友参考一下 本文的主要内容是根据前不久面试某家公司Web前端开发岗位,面试时做的一道数组去重问题的解题思路进行整理的,分享给大家。 题目本身很简单:一个ul中有一千个li,如何给这一千个li绑定一个鼠标点击事件,当鼠标点击时alert出这个li的内容和li的位置坐标xy, 需