亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#中委托和事件在觀察者模式中的應用實例

2020-01-24 02:32:03
字體:
來源:轉載
供稿:網友

通常來說當一個被監視對象的方法執行會觸發觀察者Observer的方法的時候,我們就可以在被監視對象中聲明委托和事件。本文就以實例形式展示了C#中實現委托和事件在觀察者模式中的應用。具體如下:

示例如下:

有一個寵物追蹤器掛寵物身上,只要寵物離開主人100米之外,主人手上的顯示器顯示警告信息并聲音報警。

   class Program   {     static void Main(string[] args)     {       PetTracker tracker = new PetTracker();       tracker.InstanceTrack();       Console.ReadKey();     }   }     public class PetTracker   {     private int distance;       //適時監控     public void InstanceTrack()     {       for (int i = 0; i < 102; i++)       {         distance = i;         if (distance > 100)         {           MakeAlert(distance);           ShowAlert(distance);         }       }     }       //主人手上的追蹤器終端發出警報聲     private void MakeAlert(int param)     {       Console.WriteLine("嘀嘀嘀,您的寶貝已經離你" + param + "米之外了,要注意哦~~");     }       //主人手上的追蹤器終端顯示報警信息     private void ShowAlert(int param)     {       Console.WriteLine("您的寶貝已經離你" + param + "米之外了,要注意哦~~");     }   }

運行結果如下圖所示:

定義被監視對象以及觀察者Observer:

假如把以上3個方法封裝到不同的類中去,那就是:

   public class PetTracker   {     private int distance;       //適時監控     public void InstanceTrack()     {       for (int i = 0; i < 102; i++)       {         distance = i;         if (distance > 100)         {           }       }     }      }     public class MakerAlertSupplier   {     //主人手上的追蹤器終端發出警報聲     public void MakeAlert(int param)     {       Console.WriteLine("嘀嘀嘀,您的寶貝已經離你" + param + "米之外了,要注意哦~~");     }   }     public class ShowAlertSupplier   {     //主人手上的追蹤器終端顯示報警信息     public static void ShowAlert(int param)     {       Console.WriteLine("您的寶貝已經離你" + param + "米之外了,要注意哦~~");     }   }

我們需要解決的問題是:

在PetTracker類的InstanceTrack()方法中,一旦distance > 100,該如何通知MakerAlertSupplier和ShowAleartSupplier呢?

如何看待上面的3個類:

● PetTracker可以看作是被監視對象。
● MakerAlertSupplier和ShowAleartSupplier看作是觀察者,即Observer。

解決方法:

1、考慮到Observer的方法參數都是int類型,嗯是的,不同的方法名,相同的參數列表,我們當然可以在被監視對象中定義一個委托,與observer方法有相同的參數列表。

2、如何做到被監視對象的委托被觸發從而觸發Observer的方法呢?我們需要一個委托類型的事件,通過事件變量,把Observer的方法綁定到委托上。

3、最后當被監視對象執行方法時觸發委托類型的事件,從而觸發Observer的方法。

完整代碼如下:

   class Program   {     static void Main(string[] args)     {       PetTracker tracker = new PetTracker();       tracker.TrackEvent += (new MakerAlertSupplier()).MakeAlert;       tracker.TrackEvent += ShowAlertSupplier.ShowAlert;         tracker.InstanceTrack();       Console.ReadKey();     }   }     public class PetTracker   {     private int distance;       public delegate void TrackHandler(int param); //委托     public event TrackHandler TrackEvent; //委托類型的事件       //適時監控     public void InstanceTrack()     {       for (int i = 0; i < 102; i++)       {         distance = i;         if (distance > 100)         {           if (TrackEvent != null)           {             TrackEvent(distance);           }         }       }     }      }     public class MakerAlertSupplier   {     //主人手上的追蹤器終端發出警報聲     public void MakeAlert(int param)     {       Console.WriteLine("嘀嘀嘀,您的寶貝已經離你" + param + "米之外了,要注意哦~~");     }   }     public class ShowAlertSupplier   {     //主人手上的追蹤器終端顯示報警信息     public static void ShowAlert(int param)     {       Console.WriteLine("您的寶貝已經離你" + param + "米之外了,要注意哦~~");     }   }

運行結果如下圖所示:

總結如下:

● 對于方法名不同,參數列表相同的多個類方法或方法,委托抽象了他們的定義。
● 而委托的執行和注冊就交給了委托類型的事件來做。
● 委托是局限在被監視對象內部的,雖然聲明是public,但在客戶端不能給被監視對象的委托變量賦值。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久这里只有精品| 45www国产精品网站| 亚洲最大成人网色| 国产成人精品视| 久久久久久久999| 久久久久久久一区二区三区| 精品亚洲夜色av98在线观看| 日韩在线免费高清视频| 日本高清+成人网在线观看| 欧美视频在线观看免费网址| 中文字幕日韩在线视频| 91久久精品国产91久久性色| www.xxxx欧美| 色偷偷av一区二区三区乱| 色爱av美腿丝袜综合粉嫩av| 国产精品久久不能| 久久久久久久97| 97香蕉久久超级碰碰高清版| 亚洲一区二区三区四区视频| 欧美激情a∨在线视频播放| 77777亚洲午夜久久多人| 久久久精品国产一区二区| 国产精品久久色| 国产丝袜精品视频| 一本色道久久综合狠狠躁篇的优点| 欧美激情在线观看| 国产精品入口夜色视频大尺度| 操人视频在线观看欧美| 精品一区电影国产| 成人性生交大片免费看小说| 亚洲免费一在线| 色噜噜久久综合伊人一本| 国产精品美女久久久久av超清| 狠狠色狠狠色综合日日小说| 成人淫片在线看| 久久高清视频免费| 国产人妖伪娘一区91| 日韩av一区二区在线| 欧美成人免费观看| 国产剧情日韩欧美| 欧美日韩一区二区三区在线免费观看| 国产精品嫩草影院一区二区| 国产精品久久99久久| 欧美—级a级欧美特级ar全黄| 91日韩在线视频| 欧美另类老女人| 欧美怡红院视频一区二区三区| 久久精品电影一区二区| 日韩在线观看视频免费| 欧美日韩国产中文精品字幕自在自线| 91美女片黄在线观看游戏| 欧美午夜视频一区二区| 91老司机精品视频| 最近2019年中文视频免费在线观看| 欧美人交a欧美精品| 国产精品99久久久久久www| 亚洲人成电影在线观看天堂色| 国产欧美韩国高清| 97国产在线观看| 国产精品美女在线| 亚洲欧美日本另类| 国产精品成久久久久三级| 国产精品com| 另类色图亚洲色图| 色yeye香蕉凹凸一区二区av| 97视频在线观看播放| 欧美又大粗又爽又黄大片视频| 日韩va亚洲va欧洲va国产| 亚洲综合在线做性| 久久国产精品久久久久久| 欧美成人激情视频| 亚洲自拍偷拍第一页| 亚洲精品日韩av| 91精品国产91久久久久久不卡| 国产精品久久久久久久久免费| 欧美日韩激情小视频| 国产精品美女主播在线观看纯欲| 在线日韩中文字幕| 欧美性高潮在线| 日韩电影视频免费| 欧美怡红院视频一区二区三区| 中文字幕一精品亚洲无线一区| 精品视频在线导航| 国产女同一区二区| 欧美成人四级hd版| 4444欧美成人kkkk| 狠狠躁夜夜躁久久躁别揉| 国产美女高潮久久白浆| 日韩欧美亚洲综合| 国产精品成人一区二区三区吃奶| 狠狠躁18三区二区一区| 欧美日韩一区二区三区在线免费观看| 日韩精品免费视频| 国产中文字幕日韩| 成人国产精品色哟哟| 91精品国产九九九久久久亚洲| 欧美丰满老妇厨房牲生活| 国产91精品网站| 国产精品偷伦视频免费观看国产| 欧美日韩国产激情| 亚洲高清一二三区| 91tv亚洲精品香蕉国产一区7ujn| 久久99热精品| 欧美日本亚洲视频| 欧美猛交ⅹxxx乱大交视频| 日韩高清中文字幕| 欧美成人精品一区| 国产一区二区精品丝袜| 欧美极品在线视频| 国产精品入口日韩视频大尺度| 45www国产精品网站| 日韩av在线一区二区| 亚洲成人精品在线| 亚洲大胆人体视频| 久久久久国产精品www| 国产中文字幕日韩| 欧美成人全部免费| 中文字幕日韩在线观看| 精品毛片三在线观看| 欧美高清视频免费观看| 欧美精品日韩www.p站| 国产视频福利一区| 色噜噜狠狠狠综合曰曰曰| 精品精品国产国产自在线| 欧美另类老肥妇| 国产脚交av在线一区二区| 欧美亚洲激情视频| 国产欧美 在线欧美| 久久久综合免费视频| 久色乳综合思思在线视频| 成人在线免费观看视视频| 精品成人在线视频| 丝袜美腿精品国产二区| 国产精品igao视频| 久久国产精品视频| 欧美性xxxx极品高清hd直播| 久久久www成人免费精品张筱雨| 国产亚洲成av人片在线观看桃| 91av在线免费观看| 中文字幕日韩av| 亚洲在线观看视频网站| 久久伊人精品一区二区三区| 2023亚洲男人天堂| 亚洲第一网中文字幕| 久久躁狠狠躁夜夜爽| 亚洲xxx大片| 国产精品丝袜久久久久久高清| 国产精品美乳一区二区免费| 国内精品久久久久影院 日本资源| 伊人久久久久久久久久久| 国产精品视频99| 亚洲成人在线网| 欧美成人免费观看| 一区二区三区美女xx视频| 久久久人成影片一区二区三区| 久久国产一区二区三区| 国产午夜精品视频免费不卡69堂| 亚洲精品资源在线| 欧美自拍大量在线观看| 欧美最猛性xxxxx亚洲精品| 伊人精品在线观看| 中日韩美女免费视频网站在线观看| xx视频.9999.com| 久久久久久久久久久网站|