<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      從老李打漁淺析C#中的委托/事件機(jī)制(1)

      這幾天在整理C#語言,發(fā)現(xiàn)還有很多東西由于沒有真正用到,理解得都很膚淺。比如:委托,感覺就是一個(gè)函數(shù)指針,用來實(shí)現(xiàn)事件模型。直到今天看到一篇老外的文章,感覺理解加深了不少。于是決定結(jié)合自己的理解重新寫一下,也算是總結(jié)吧。

      緊耦合

      從前,在東海邊有個(gè)村子,有個(gè)漁夫叫老李,世代以打漁為生。而村里的王員外是老李的老客戶,每天都要向老李買鮮魚。因?yàn)檫@個(gè)村子只有老李一個(gè)漁夫,所以老李的生意非常紅火,以至于王員外要想買到新鮮的魚就一定要盯緊老李,否則就只能買到小魚了。“老李,你隨時(shí)給我電話,匯報(bào)打漁情況,我要買到最好的魚,最新鮮的魚,錢不是問題!”。于是就有了下面一幕:

      FishMan.cs

      using System;

      namespace delegateMain
      {
       ///
       /// FishMan 的摘要說明。
       ///
       public class FishMan
       {
        private Wang _wang;
        public FishMan()
        {
         //
         // TODO: 在此處添加構(gòu)造函數(shù)邏輯
         //
        }
        public void Advise(Wang wang) { _wang = wang; }
        public void DoWork()
        {
         Console.WriteLine("漁夫老李: 王員外,我開始下網(wǎng)");
         if( _wang != null ) _wang.WorkStarted();

         Console.WriteLine("漁夫老李: 王員外,我正在打魚中");
         if( _wang != null ) _wang.WorkProgressing();

         Console.WriteLine("漁夫老李: 王員外,我魚打上來了");
         if( _wang != null )
         {
          int grade = _wang.WorkCompleted();
          Console.WriteLine("漁夫老李:賣得銀兩=" + grade);
         }
        }

      }
      }

      Wang.cs

      using System;

      namespace delegateMain
      {
       ///
       /// Wang 的摘要說明。
       ///
       public class Wang
       {
        public Wang()
        {
         //
         // TODO: 在此處添加構(gòu)造函數(shù)邏輯
         //
        }
        public void WorkStarted() {Console.WriteLine("王員外:好的。"); }
        public void WorkProgressing() { Console.WriteLine("王員外:好的,好的。"); }
        public int WorkCompleted()
        {
         Console.WriteLine("王員外:老李你的魚打上來多少,多少一斤?");
         return 2;

        }

       }
      }

      delegateMain.cs

      using System;

      namespace delegateMain
      {
       ///
       /// Class1 的摘要說明。
       ///
       class FishManDemo
       {
        ///
        /// 應(yīng)用程序的主入口點(diǎn)。
        ///
        [STAThread]
        static void Main(string[] args)
        {
         FishMan li = new FishMan();
         Wang WangYuanWai = new Wang();
         li.Advise(WangYuanWai);
         li.DoWork();

         Console.WriteLine("Main: 打魚完成");
         Console.ReadLine();

        }
       }
      }

      http://xiekeli.blogbus.com/files/1168045873.gif

      接口

      后來張財(cái)主也要搶著買老李的魚,而且也要老李及時(shí)向他反饋打漁的情況,于是老李覺得有必要搞個(gè)售前服務(wù)部對(duì)這些個(gè)財(cái)主員外們反饋信息。

      IWorkerEvents.cs

      using System;

      namespace delegateMain
      {
       ///
       /// IWorkerEvents 的摘要說明。
       ///
       public interface IWorkerEvents
       {
        void WorkStarted();
        void WorkProgressing();
        int WorkCompleted();

       }
      }

      Wang.cs

      using System;

      namespace delegateMain
      {
       ///
       /// Wang 的摘要說明。
       ///
       public class Wang : IWorkerEvents
       {
        public void WorkStarted() {Console.WriteLine("王員外:好的。"); }
        public void WorkProgressing() { Console.WriteLine("王員外:好的,好的。"); }
        public int WorkCompleted()
        {
         Console.WriteLine("王員外:老李你的魚打上來多少,多少一斤?");
         return 2;
        }

       }
      }

      Zhang.cs

      using System;

      namespace delegateMain
      {
       ///
       /// Zhang 的摘要說明。
       ///
       public class Zhang : IWorkerEvents
       {
        public void WorkStarted() {Console.WriteLine("張財(cái)主:打吧。(還沒打漁就打電話啊)"); }
        public void WorkProgressing() { Console.WriteLine("張財(cái)主:打到魚了再告訴我,煩不煩"); }
        public int WorkCompleted()
        {
         Console.WriteLine("張財(cái)主:老李你的魚打上來多少,我要十斤?");
         return 20; /* 總分為10 */
        }
       }
      }

      FishMan.cs

      using System;

      namespace delegateMain
      {
       ///
       /// FishMan 的摘要說明。
       ///
       public class FishMan
       {
        private IWorkerEvents _events;
        public FishMan()
        {
         //
         // TODO: 在此處添加構(gòu)造函數(shù)邏輯
         //
        }
        public void Advise(IWorkerEvents events) { _events = events; }
        public void DoWork()
        {
         Console.WriteLine("漁夫老李: 尊敬的客戶,我開始下網(wǎng)");
         if( _events != null ) _events.WorkStarted();

         Console.WriteLine("漁夫老李: 尊敬的客戶,我正在打魚中");
         if( _events != null ) _events.WorkProgressing();

         Console.WriteLine("漁夫老李: 尊敬的客戶,我魚打上來了");
         if( _events != null )
         {
          int grade = _events.WorkCompleted();
          Console.WriteLine("漁夫老李:賣得銀兩=" + grade);
         }
        }

       }
      }

      delegateMain.cs

      using System;

      namespace delegateMain
      {
       ///
       /// Class1 的摘要說明。
       ///
       class FishManDemo
       {
        ///
        /// 應(yīng)用程序的主入口點(diǎn)。
        ///
        [STAThread]
        static void Main(string[] args)
        {
         FishMan li = new FishMan();
         IWorkerEvents WangYuanWai = new Wang();
         IWorkerEvents Zhangcaizhu = new Zhang();
         li.Advise(Zhangcaizhu);
         li.DoWork();

         Console.WriteLine("Main: 打魚完成");
         Console.ReadLine();

        }
       }
      }

      http://xiekeli.blogbus.com/files/1168047484.gif

      http://xiekeli.blogbus.com/files/1168047589.gif

      posted @ 2007-01-05 16:44  紅心李  閱讀(172)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 精品国产成人国产在线观看| 久久无码中文字幕免费影院蜜桃| 国产精品成人av在线观看春天| 日韩精品 在线 国产 丝袜| 欧美午夜精品久久久久久浪潮 | 高潮潮喷奶水飞溅视频无码| 少妇伦子伦精品无吗| 无人区码一码二码三码区| 亚洲avav天堂av在线网爱情| 精品国产粉嫩内射白浆内射双马尾| 国产精品七七在线播放| 日韩av在线一卡二卡三卡| 在线a级毛片免费视频| 亚洲色一色噜一噜噜噜| 老熟妇老熟女老女人天堂| 午夜在线不卡| 少妇办公室好紧好爽再浪一点| 99RE8这里有精品热视频| 精品久久久久久成人AV| 中山市| 成人亚洲狠狠一二三四区| 久久久噜噜噜久久| 华人在线亚洲欧美精品| 亚洲熟妇乱色一区二区三区| 国内少妇偷人精品视频| 久久精品夜色噜噜亚洲aa| 在线播放深夜精品三级| 天天躁久久躁日日躁| 久久国产精品亚洲精品99| 澳门永久av免费网站| 宁国市| 亚欧洲乱码视频在线专区| 国产一区二区三区小说| 国产女同一区二区在线| 亚洲成人午夜排名成人午夜| 丰腴饱满的极品熟妇| 亚洲精品综合一区二区三区| 夜夜影院未满十八勿进| 99在线精品国自产拍中文字幕 | 亚洲婷婷综合色高清在线 | 日本高清视频色欧WWW|