gpt4 book ai didi

c# - 使用C#事件系统实现Publisher/Subscriber模式比用类接口(interface)实现有什么优势?

转载 作者:太空宇宙 更新时间:2023-11-03 22:16:39 25 4
gpt4 key购买 nike

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

与仅使用类接口(interface)以经典方式实现此设计模式相比,有何优势?

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

pub.RaiseCustomEvent += HandleCustomEvent;

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

最佳答案

方便是个大问题,特别是因为 C# 没有 Java 的内部类;因为它将是一个单一方法接口(interface),所以这允许简单的订阅——可能通过类型上的方法,但甚至可能是内联的:

pub.RaiseCustomEvent += delegate { DoSomething(); };

以上还允许对任何变量等进行完整的词法捕获(与 Java 对比,Java 捕获任何变量的 - 而不是变量本身 - 所以双向通信是可能的)。

要使用接口(interface)执行此操作,我需要声明一个新类、实现接口(interface)、提供提供实现的方法,并处理任何变量/捕获传输。

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

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

关于c# - 使用C#事件系统实现Publisher/Subscriber模式比用类接口(interface)实现有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4912759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com