c# - C# 中的事件 - 它是 OOP 吗?

标签 c# oop events

自从我开始在 c# 中使用事件以来,我一直想知道它是否面向 OOP。

让我解释一下。在 Java 中,它有 EventListner、Observer/Observable,必须继承这些对象才能触发事件或监听事件。我的观点是,在 Java 中,它必须是一个对象,负责通知订阅者或在收到通知后执行操作。在 C# 中,我所看到的是:

public delegate void SomeHandler();
public event SomeHandler OnAction;

...
//somewhere in the firing class
OnAction();

...
//somewhere else in a subscriber class
_generateReport.ReportSubmited += someMethod;

private void someMethod()
{
//do some job
}

没有类,只有方法和属性...

那么,它是 OOP 吗?如果是,它是如何工作的?

谢谢!

最佳答案

负责保存处理程序列表的类型是 SomeHandler 类型,它是一个委托(delegate)类型。您可以从适当的方法构建委托(delegate)的实例,表示对该方法的调用...您可以将委托(delegate)组合在一起以表示一系列调用。

基本上可以将事件视为对观察者模式的语言/平台支持。

您应该知道幕后事件和代表是什么样的 - 请参阅我的 article on them了解更多详情。

非面向对象的部分是虽然委托(delegate)可以像任何其他对象一样传递,但事件不能:(您可以使用它们的等效反射( EventInfo) 但这不是一回事...

关于c# - C# 中的事件 - 它是 OOP 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5342902/

相关文章:

c# - 将 MahApps 图标与 ContextMenu 结合使用

c# - Winforms TableLayoutPanel 以编程方式添加行

c++ - 运算符重载逻辑问题

excel - 有没有办法在打开具有相似文件名的 Excel 文件时自动运行宏?

javascript - IE 在 JavaScript 运行某些操作时停止工作

c# - Validator.TryValidateProperty 不工作

c# - 为什么我的 WebApi 收到响应状态代码 204 No Content?

javascript - 必要时将 `this` 放入 `forEach` 回调的首选方法是什么?

MATLAB 不显示用户创建的类私有(private)方法和属性的帮助

python - 如何将 QPushButton 自定义为仅在单击箭头时弹出菜单?