自从我开始在 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/