有太多事件吗?

Ian*_*Ian 9 c# events

public class Human
{
    public void Run(){}
    public void Jump(){}
    public void Eat(){}

    //Generalized approach
    public EventHandler<HumanActivityProgressChanged> ActivityProgressChanged;
    public EventHandler<HumanActivityCompleted> ActivityCompleted;

    //Per-method approach
    public EventHandler<HumanActivityProgressChanged> Running;
    public EventHandler<HumanActivityCompleted> Ran;

    public EventHandler<HumanActivityProgressChanged> Jumping;
    public EventHandler<HumanActivityCompleted> Jumped;

    public EventHandler<HumanActivityProgressChanged> Eating;
    public EventHandler<HumanActivityCompleted> Ate;
}
Run Code Online (Sandbox Code Playgroud)

我有不同的方法来实现基于事件的异步模式.这些方法触发ProgressChangedeventargs和Completedeventargs.它们都触发相同的事件标记(如上面的代码所示).

每个异步方法提供一个事件是否有意义?或者只为所有异步方法提供一般化事件?是否存在太多事件?

Mon*_*ong 6

两者都有效.这实际上取决于你的意图.

您是否希望听众想要听取所有事件并以类似的方式回应?去广告活动.

如果您期望每个对不同方面感兴趣的不同听众,在这些事件上执行截然不同的任务,那么请选择第二个.

api设计背后的想法不是在客户端强加某种使用方式(Rails用户可能不同意),但是你会在设计方式上给出强有力的提示.