程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中拜托和事宜在不雅察者形式中的運用實例

C#中拜托和事宜在不雅察者形式中的運用實例

編輯:C#入門知識

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,但在客戶端不克不及給被監督對象的拜托變量賦值。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved