首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C# event system实现发布者/订阅者模式,而不是使用类接口来实现,会带来什么好处?

使用C# event system实现发布者/订阅者模式,而不是使用类接口来实现,会带来什么好处?
EN

Stack Overflow用户
提问于 2011-02-06 18:33:07
回答 2查看 701关注 0票数 1

这里显示了一个实现:http://msdn.microsoft.com/en-us/library/w369ty8x.aspx

与仅仅使用类接口的经典方式实现此设计模式相比,有什么优势?

例如,哪里是解耦,因为您通过指令在订阅者和发布者之间进行了紧密的直接绑定:

代码语言:javascript
复制
pub.RaiseCustomEvent += HandleCustomEvent;

因此,在这种情况下,我看不到任何与直接经典实现相比的解耦优势。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-06 18:48:16

便利性是个大问题,特别是因为C#没有Java的内部类;因为它是一个单方法接口,所以允许简单的订阅-可能是通过类型上的方法,但也可能是内联:

代码语言:javascript
复制
pub.RaiseCustomEvent += delegate { DoSomething(); };

上面还允许完全捕获任何变量等(与Java相比,Java捕获任何变量的值-而不是变量本身-因此双向通信是可能的)。

要使用接口实现这一点,我需要声明一个新类,实现该接口,提供一个提供实现的方法,并处理任何变量/捕获传输。

事件还允许以一种非常方便的方式向多个订阅者广播。

与类相比,在运行时创建委托(对于元编程等)也更容易--例如,我可以在运行时创建一个委托(从头开始),然后使用DynamicMethod (如果我喜欢IL)或Expression (如果我喜欢AST)很容易地订阅它。创建一个类型并实现一个接口需要更多的工作(AssemblyNameAssemblyBuilderModuleBuilderTypeBuilder以及至少2个TypeMethodInfo)。

票数 2
EN

Stack Overflow用户

发布于 2011-02-06 18:53:10

再说一次,方便:

使用接口,您必须:

即使您不需要一些event

  • register

,也可以从interface

  • implement回调(全部!)派生

使用事件,所有事情都在一行中完成,.NET自动处理一个事件的多个钩子。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4912759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档