于是
彼得意识到接口虽然在很多情况都很有用
但是当用作事件时
粒度
不够好
他希望能够仅在别人想要时才通知他们
于是他决定把接口的方法分离为单独的委托
每个委托都像一个小的接口方法
delegate void WorkStarted();
delegate void WorkProgressing();
delegate int WorkCompleted();
class Worker {
public void DoWork() {
ConsoleWriteLine(工作: 工作开始);
if( started != null ) started();
ConsoleWriteLine(工作: 工作进行中);
if( progressing != null ) progressing();
ConsoleWriteLine(工作: 工作完成);
if( completed != null ) {
int grade = completed();
ConsoleWriteLine(工人的工作得分= + grade);
}
}
public WorkStarted started;
public WorkProgressing progressing;
public WorkCompleted completed;
}
class Boss {
public int WorkCompleted() {
ConsoleWriteLine(Better);
return ; /* 总分为 */
}
}
class Universe {
static void Main() {
Worker peter = new Worker();
Boss boss = new Boss();
petercompleted = new WorkCompleted(bossWorkCompleted);
peterDoWork();
ConsoleWriteLine(Main: 工人工作完成);
ConsoleReadLine();
}
}
静态监听者
这样彼得不会再拿他老板不想要的事件来烦他老板了但是他还没有把宇宙放到他的监听者列表中因为宇宙是个包涵一切的实体看来不适合使用实例方法的委托(想像一下实例化一个宇宙要花费多少资源…)于是彼得就需要能够对静态委托进行挂钩委托对这一点支持得很好
class Universe {
static void WorkerStartedWork() {
ConsoleWriteLine(Universe notices worker starting work);
}
static int WorkerCompletedWork() {
ConsoleWriteLine(Universe pleased with workers work);
return ;
}
static void Main() {
Worker peter = new Worker();
Boss boss = new Boss();
petercompleted = new WorkCompleted(bossWorkCompleted);
peterstarted = new WorkStarted(UniverseWorkerStartedWork);
petercompleted = new WorkCompleted(UniverseWorkerCompletedWork);
peterDoWork();
ConsoleWriteLine(Main: 工人工作完成);
ConsoleReadLine();
}
}
[] [] []