c#

位置:IT落伍者 >> c# >> 浏览文章

NET委托:一个关于C#的睡前故事[2]


发布日期:2018年03月17日
 
NET委托:一个关于C#的睡前故事[2]
于是彼得意识到接口虽然在很多情况都很有用但是当用作事件时粒度不够好他希望能够仅在别人想要时才通知他们于是他决定把接口的方法分离为单独的委托每个委托都像一个小的接口方法

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();

}

}

[] [] []

               

上一篇:用C#写一个下载程序

下一篇:NET委托:一个关于C#的睡前故事[3]