C#中拜托和事宜在不雅察者形式中的運用實例。本站提示廣大學習愛好者:(C#中拜托和事宜在不雅察者形式中的運用實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中拜托和事宜在不雅察者形式中的運用實例正文
平日來講當一個被監督對象的辦法履行會觸發不雅察者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,但在客戶端不克不及給被監督對象的拜托變量賦值。