这里显示了一个实现:http://msdn.microsoft.com/en-us/library/w369ty8x.aspx
与仅仅使用类接口的经典方式实现此设计模式相比,有什么优势?
例如,哪里是解耦,因为您通过指令在订阅者和发布者之间进行了紧密的直接绑定:
pub.RaiseCustomEvent += HandleCustomEvent;因此,在这种情况下,我看不到任何与直接经典实现相比的解耦优势。
发布于 2011-02-06 18:48:16
便利性是个大问题,特别是因为C#没有Java的内部类;因为它是一个单方法接口,所以允许简单的订阅-可能是通过类型上的方法,但也可能是内联:
pub.RaiseCustomEvent += delegate { DoSomething(); };上面还允许完全捕获任何变量等(与Java相比,Java捕获任何变量的值-而不是变量本身-因此双向通信是可能的)。
要使用接口实现这一点,我需要声明一个新类,实现该接口,提供一个提供实现的方法,并处理任何变量/捕获传输。
事件还允许以一种非常方便的方式向多个订阅者广播。
与类相比,在运行时创建委托(对于元编程等)也更容易--例如,我可以在运行时创建一个委托(从头开始),然后使用DynamicMethod (如果我喜欢IL)或Expression (如果我喜欢AST)很容易地订阅它。创建一个类型并实现一个接口需要更多的工作(AssemblyName、AssemblyBuilder、ModuleBuilder、TypeBuilder以及至少2个Type和MethodInfo)。
发布于 2011-02-06 18:53:10
再说一次,方便:
使用接口,您必须:
即使您不需要一些event
,也可以从interface
使用事件,所有事情都在一行中完成,.NET自动处理一个事件的多个钩子。
https://stackoverflow.com/questions/4912759
复制相似问题