事件,代表或接口?

Wim*_*nen 26 c#

假设我有一个Monkey类,有时需要获取Banana的一个实例.提供这种香蕉的方式对猴子不感兴趣,但它确实启动了香蕉采集.

现在我至少有三种方法可以将我的猴子送到香蕉供应商那里.最好的方法是什么?

1.事件

提出一个Monkey.BananaNeeded事件.事件处理程序设置BananaNeededEventArgs.Banana属性.

2.界面

调用IBananaProvider.GetBanana.该IBananaProvider实例作为构造函数参数或通过属性注入到monkey中.

3.代表

调用类型的委托System.Func<Banana>.委托作为构造函数参数或通过属性注入猴子.这个很诱人,因为它不需要声明任何额外的接口或类,但显然它不是一个受欢迎的选择.

Mic*_*key 7

我不喜欢事件和委托选项,除非有一种机制可以确保不会附加多个处理程序.因此,选项2是IMO的赢家.

  • @Guffa - 呃?.NET中的所有代理都是MulticastDelegate,重点是你可以*为它附加多个方法.你觉得活动怎么样? (4认同)