C#中使用委托实现观察者模式?

11

已经有一个问题得到了回答,问题是: 在C#中,使用事件已经实现了观察者模式吗?

它问的是观察者模式是否已经使用事件在C#中实现了。

虽然我知道事件和观察者模式,但观察者模式难道不只是委托,而事件是进一步的实现吗?


你能详细说明你的问题吗?你似乎知道另一个问题及其答案,因此你似乎还在询问其他问题,但我不清楚那是什么。 - Mark Seemann
1个回答

30

你是正确的。一个事件就是带有一些略微不同功能的委托。所有观察者模式都可以使用委托实现,而不必碰触“event”关键字。

那么你可能会对“事件”关键字到底有什么作用感兴趣。

  • 事件可以成为接口的一部分,而常规委托字段则不行
  • 外部类无法调用事件,但可以调用常规委托
  • 事件具有额外的访问器(添加和删除),您可以重写并提供自定义功能

编辑:这里有一个很好的文章,其中包含事件和委托之间IL代码的比较。(提示:基本相同)。


@womp,关于你的第一个要点,Action<T>不是可以成为接口的一部分的委托吗? - Matt
@womp,关于你的第一个要点,Action<T>不是可以成为接口一部分的委托吗?public interface ITest { void SupplyCallbackMethod(Action<int> callback); } - Matt
有趣的是,这些差异是如此微妙,以至于大多数人根本不需要费心去关注事件,因为代表们大部分时间都会处理他们所需的事情。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接