您现在的位置是:首页 >

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

火烧 2021-05-26 00:49:13 1073
NET委托:一个关于C#的睡前故事[2] 于是 彼得意识到接口虽然在很多情况都很有用 但是当用作事件时 粒度 不够好 他希望能够仅在别人想要时才通知他们 于是他决定把接口的方法分离为单独的委托 每个委

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

    于是 彼得意识到接口虽然在很多情况都很有用 但是当用作事件时 粒度 不够好 他希望能够仅在别人想要时才通知他们 于是他决定把接口的方法分离为单独的委托 每个委托都像一个小的接口方法

delegate void WorkStarted();delegate void WorkProgressing();delegate int WorkCompleted();class Worker { public void DoWork() {  Console WriteLine( 工作: 工作开始 );  if( started != null ) started();  Console WriteLine( 工作: 工作进行中 );  if( progressing != null ) progressing();  Console WriteLine( 工作: 工作完成 );  if( pleted != null ) {   int grade = pleted();   Console WriteLine( 工人的工作得分= + grade);  } } public WorkStarted started; public WorkProgressing progressing; public WorkCompleted pleted;}class Boss { public int WorkCompleted() {  Console WriteLine( Better );  return ;  }}class Universe { static void Main() {  Worker peter = new Worker();  Boss boss = new Boss();  peter pleted = new WorkCompleted(boss WorkCompleted);  peter DoWork();  Console WriteLine( Main: 工人工作完成 );  Console ReadLine(); }}

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

 静态监听者  这样 彼得不会再拿他老板不想要的事件来烦他老板了 但是他还没有把宇宙放到他的监听者列表中 因为宇宙是个包涵一切的实体 看来不适合使用实例方法的委托(想像一下 实例化一个 宇宙 要花费多少资源… ) 于是彼得就需要能够对静态委托进行挂钩 委托对这一点支持得很好

class Universe { static void WorkerStartedWork() {  Console WriteLine( Universe notices worker starting work ); } static int WorkerCompletedWork() {  Console WriteLine( Universe pleased with worker s work );  return ; } static void Main() {  Worker peter = new Worker();  Boss boss = new Boss();  peter pleted = new WorkCompleted(boss WorkCompleted);  peter started = new WorkStarted(Universe WorkerStartedWork);  peter pleted = new WorkCompleted(Universe WorkerCompletedWork);  peter DoWork();  Console WriteLine( Main: 工人工作完成 );  Console ReadLine(); }}

lishixinzhi/Article/program/net/201311/15529  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码