[翻译].NET委托:一个C#睡前故事[7]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

/pre>

 

事件

不幸的是,宇宙太忙了,也不习惯时刻关注它里面的个体,它可以用自己的委托替换了彼得老板的委托。这是把彼得的Worker类的的委托字段做成public的一个无意识的副作用。同样,如果彼得的老板不耐烦了,也可以决定自己来激发彼得的委托(真是一个粗鲁的老板):

        // Peter's boss taking matters into his own hands
        if( peter.completed != null ) peter.completed();

彼得不想让这些事发生,他意识到需要给每个委托提供“注册”和“反注册”功能,这样监听者就可以自己添加和移除委托,但同时又不能清空整个列表也不能随意激发彼得的事件了。彼得并没有来自己实现这些功能,相反,他使用了event关键字让C#编译器为他构建这些方法:

class Worker {
...
    public event WorkStarted started;
    public event WorkProgressing progressing;
    public event WorkCompleted completed;
}

 

彼得知道event关键字在委托的外边包装了一个property,仅让C#客户通过+= -=操作符来添加和移除,强迫他的老板和宇宙正确地使用事件。

static void Main() {
        Worker  peter = new Worker();
        Boss        boss = new Boss();
        peter.completed += new WorkCompleted(boss.WorkCompleted);
        peter.started += new WorkStarted(Universe.WorkerStartedWork);
        peter.completed += new WorkCompleted(Universe.WorkerCompletedWork);
        peter.DoWork();
 
        Console.WriteLine(“Main: 工人工作完成”);
        Console.ReadLine();
    }

 

“收获”所有结果

本文关键:[翻译].NET委托:一个C#睡前故事
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top