C# 是否对委托使用过基于接口的回调/事件?

C# 是否对委托使用过基于接口的回调/事件?,c#,interface,delegates,C#,Interface,Delegates,在Java中,没有委托,事件是在观察者模式之后使用接口回调进行建模的。我突然想到,如果在一个包含六个以上事件的框架上工作,那么使用委托就成了一个相当冗长的练习 作为一个忘记了C#的Java开发人员,我想知道是否有正当的理由使用事件接口,或者是否真的应该到处使用委托?如果对多个回调做出反应总是有意义的,那么使用接口可能是有意义的。但是,您可能希望编写一些适配器方法,以便通过为某些回调提供委托来实现接口—这些回调正是您想要的 这就是工作原理。。。几乎没有人真正实现过-他们使用IObservable.

在Java中,没有委托,事件是在观察者模式之后使用接口回调进行建模的。我突然想到,如果在一个包含六个以上事件的框架上工作,那么使用委托就成了一个相当冗长的练习


作为一个忘记了C#的Java开发人员,我想知道是否有正当的理由使用事件接口,或者是否真的应该到处使用委托?

如果对多个回调做出反应总是有意义的,那么使用接口可能是有意义的。但是,您可能希望编写一些适配器方法,以便通过为某些回调提供委托来实现接口—这些回调正是您想要的

这就是工作原理。。。几乎没有人真正实现过-他们使用
IObservable.Subscribe
扩展方法,该方法允许调用方通过委托指定
OnNext
OnCompleted
OnError
处理程序


通过这种方式,您可以获得委托的好处(由于lambda表达式等原因,委托通常比接口更容易指定),但也可以传递一个一致的对象,该对象表示所有相关回调。

委托更灵活。由于C#(在Java意义上)中没有匿名类,因此无法轻松实现内联接口。因此,每当一个API要求我实现一个接口时,我就必须写出那个类,与lambdas相比,它迫使我在物理上将逻辑彼此分离得更远,这通常会降低可读性

有趣的。。。但对我来说,仍然有一点理论性。那么,使用委托而不是以下回调定义的方法是什么:公共接口IPluginEvents{void OnLoad(IPlugin插件);void OnShow(IPlugin插件);bool CanUnload(IPlugin插件);void OnUnload(IPlugin插件);},一种选择是让一个类实现接口,该接口接受构造函数中的委托。。。或者可能有一个流畅的接口
WithLoadHandler(…)。WithShowHandler(…)
etc,其中每个调用都使用额外的处理程序构建一个类的新实例。不确定。见鬼,它甚至可以只使用普通事件,并通过调用事件处理程序来实现接口。