熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

NET委托:一個關於C#的睡前故事[1]

2013-11-13 12:15:51  來源: .NET編程 
    從前在南方一塊奇異的土地上有個工人名叫彼得他非常勤奮對他的老板總是百依百順但是他的老板是個吝啬的人從不信任別人堅決要求隨時知道彼得的工作進度以防止他偷懶但是彼得又不想讓老板呆在他的辦公室裡站在背後盯著他於是就對老板做出承諾無論何時只要我的工作取得了一點進展我都會及時讓你知道彼得通過周期性地使用帶類型的引用(原文為typed reference 也就是delegate??)回調他的老板來實現他的承諾如下 class Worker {
 public void Advise(Boss boss) { _boss = boss; }
 public void DoWork() {
  ConsoleWriteLine(工作: 工作開始);
  if( _boss != null ) _bossWorkStarted();
   ConsoleWriteLine(工作: 工作進行中);
  if( _boss != null ) _bossWorkProgressing();

   ConsoleWriteLine(工作: 工作完成);
  if( _boss != null ) {
   int grade = _bossWorkCompleted();
   ConsoleWriteLine(工人的工作得分= + grade);
  }
 }
 private Boss _boss;
}

class Boss {
 public void WorkStarted() { /* 老板不關心 */ }
 public void WorkProgressing() { /*老板不關心 */ }
 public int WorkCompleted() {
  ConsoleWriteLine(時間差不多!);
  return ; /* 總分為 */
 }
}

class Universe {
 static void Main() {
  Worker peter = new Worker();
  Boss boss = new Boss();
  peterAdvise(boss);
  peterDoWork();

  ConsoleWriteLine(Main: 工人工作完成);
  ConsoleReadLine();
 }
}


  接口

  現在彼得成了一個特殊的人他不但能容忍吝啬的老板而且和他周圍的宇宙也有了密切的聯系以至於他認為宇宙對他的工作進度也感興趣不幸的是他必須也給宇宙添加一個特殊的回調函數Advise來實現同時向他老板和宇宙報告工作進度彼得想要把潛在的通知的列表和這些通知的實現方法分離開來於是他決定把方法分離為一個接口

interface IWorkerEvents {
 void WorkStarted();
 void WorkProgressing();
 int WorkCompleted();
}

class Worker {
 public void Advise(IWorkerEvents events) { _events = events; }
 public void DoWork() {
  ConsoleWriteLine(工作: 工作開始);
  if( _events != null ) _eventsWorkStarted();

   ConsoleWriteLine(工作: 工作進行中);
  if(_events != null ) _eventsWorkProgressing();

  ConsoleWriteLine(工作: 工作完成);
  if(_events != null ) {
   int grade = _eventsWorkCompleted();

   ConsoleWriteLine(工人的工作得分= + grade);
  }
 }
 private IWorkerEvents _events;
}

class Boss : IWorkerEvents {
 public void WorkStarted() { /* 老板不關心 */ }
 public void WorkProgressing() { /* 老板不關心 */ }
 public int WorkCompleted() {
  ConsoleWriteLine(時間差不多!);
  return ; /* 總分為 */
 }
}


  委托

  不幸的是每當彼得忙於通過接口的實現和老板交流時就沒有機會及時通知宇宙了至少他應該忽略身在遠方的老板的引用好讓其他實現了IWorkerEvents的對象得到他的工作報告

  他的老板還是抱怨得很厲害彼得!他老板吼道你為什麼在工作一開始和工作進行中都來煩我?!我不關心這些事件你不但強迫我實現了這些方法而且還在浪費我寶貴的工作時間來處理你的事件特別是當我外出的時候更是如此!你能不能不再來煩我?

[]  []  []  


From:http://tw.wingwit.com/Article/program/net/201311/15527.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.