成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#事件模型的一個實例

開發 后端
本文通過一個一個實例來介紹C#事件模型,供大家參考。

在.net設計開發過程中事件無疑是用的最多的,下面設計幾個類來理解CLR事件工作機制:

C#事件模型應用場景:假設我設計一個送貨上門的服務程序,當要送貨時我將消息發送給送奶工或者郵遞員等。

在構建應用程序時,我們先設計一個名為GoodsManager的類型負責發送消息,為GoodsManager類型定義一個對外提供名為NewGoods的事件。其它類型如"Milk"、“NewsPaper”可以訂閱該事件。當GoodsManager接收到新的消息時,他將引發該事件,將消息分發給已訂閱事件的對象。各個對象則以自己期望的方式來處理消息。

  1. class Program     
  2.     {     
  3.         static void Main(string[] args)     
  4.         {     
  5.             GoodsManager gm = new GoodsManager();     
  6.             Milk milk = new Milk(gm);     
  7.             NewsPaper paper = new NewsPaper();     
  8.             paper.Register(gm);     
  9.             gm.SubmitGoods("Jacky","Lily","送貨上門");     
  10.     
  11.             Console.WriteLine("**************");     
  12.             //發生經濟危機了取消Milk訂閱     
  13.             milk.UnRegister(gm);     
  14.             gm.SubmitGoods("lily""Peter""送貨上門");     
  15.             Console.ReadLine();     
  16.                  
  17.         }     
  18.     
  19.         /// < summary>     
  20.         /// 定義一個類型用于存放發送給事件接收者的附加信息     
  21.         /// < /summary>     
  22.         internal class NewGoodsEventArgs : EventArgs     
  23.         {     
  24.             private readonly String f_From, f_To, f_Desc;     
  25.             public NewGoodsEventArgs(String from,String to,String desc)     
  26.             {     
  27.                 f_From  = from;     
  28.                 f_To    = to;     
  29.                 f_Desc  = desc;     
  30.             }     
  31.             public String From { get { return f_From; } }     
  32.             public String To { get { return f_To; } }     
  33.             public String Desc { get { return f_Desc; } }     
  34.         }     
  35.              
  36.         //定義事件成員管理類     
  37.         internal class GoodsManager     
  38.         {     
  39.             //創建線程同步鎖的私有字段     
  40.             private readonly Object m_eventLock = new Object();     
  41.     
  42.             private EventHandler< NewGoodsEventArgs> m_NewGoods;     
  43.             //增加一個事件成員     
  44.             public event EventHandler< NewGoodsEventArgs> NewGoods     
  45.             {     
  46.                 //加私有鎖并向委托鏈表增加一個處理程序     
  47.                 add { lock (m_eventLock) { m_NewGoods += value; } }     
  48.                 //顯示實現Remove方法     
  49.                 remove { lock (m_eventLock) { m_NewGoods -= value; } }     
  50.             }     
  51.                  
  52.             //引發事件的方法,以通知訂閱者對像事件已發生。     
  53.             protected virtual void OnNewGoods(NewGoodsEventArgs e)     
  54.             {     
  55.                 EventHandler< NewGoodsEventArgs> temp = m_NewGoods;     
  56.                 if (temp != null)     
  57.                     temp(this,e);     
  58.             }     
  59.             //將輸入轉化為期望事件     
  60.             public void SubmitGoods(String from, String to, String desc)     
  61.             {     
  62.                 //構個對象用來通知接受者信息     
  63.                 NewGoodsEventArgs e = new NewGoodsEventArgs(from,to,desc);     
  64.                 //調用虛方法通知事件已發生     
  65.                 OnNewGoods(e);     
  66.             }     
  67.         }     
  68.     
  69.             
  70.         //監聽事件的類型     
  71.         internal sealed class Milk     
  72.         {     
  73.             public Milk() { }     
  74.             public Milk(GoodsManager gm)     
  75.             {     
  76.                 gm.NewGoods += new EventHandler< NewGoodsEventArgs>(Milk_NewGoods);     
  77.             }     
  78.     
  79.             //當新的物品送到時執行此方法     
  80.             void Milk_NewGoods(object sender, NewGoodsEventArgs e)     
  81.             {     
  82.                 Console.WriteLine("Accept Milk");     
  83.                 Console.WriteLine("From:{0},To:{1},desc:{2}",e.From,e.To,e.Desc);     
  84.             }     
  85.     
  86.             public void UnRegister(GoodsManager gm)//注銷事件     
  87.             {     
  88.                 gm.NewGoods -= Milk_NewGoods;     
  89.             }     
  90.             public void Register(GoodsManager gm) //訂閱事件     
  91.             {     
  92.                 gm.NewGoods += Milk_NewGoods;     
  93.             }     
  94.         }     
  95.     
  96.         internal sealed class NewsPaper     
  97.         {     
  98.             public NewsPaper() { }     
  99.             public NewsPaper(GoodsManager gm)     
  100.             {     
  101.                 gm.NewGoods += new EventHandler< NewGoodsEventArgs>(Milk_NewGoods);     
  102.             }     
  103.             void Milk_NewGoods(object sender, NewGoodsEventArgs e)     
  104.             {     
  105.                 Console.WriteLine("Accept News Paper");     
  106.                 Console.WriteLine("From:{0},To:{1},desc:{2}", e.From, e.To, e.Desc);     
  107.             }     
  108.             public void UnRegister(GoodsManager gm)     
  109.             {     
  110.                 gm.NewGoods -= Milk_NewGoods;     
  111.             }     
  112.             public void Register(GoodsManager gm)     
  113.             {     
  114.                 gm.NewGoods += Milk_NewGoods;     
  115.             }     
  116.         }     
  117.     }   

C#事件模型執行結果:

執行結果 

C#事件模型的例子就介紹到這里。

【編輯推薦】

  1. C# winForm自定義鼠標樣式的兩種方法
  2. C#自定義消息框的設置圖解
  3. 掌握C#自定義泛型類:從初始化說起
  4. C#存儲過程的循序漸進
  5. 存儲過程的優勢及其調用方法介紹

 

責任編輯:book05 來源: csdn
相關推薦

2009-07-30 18:18:27

C#時間計算

2009-09-01 16:14:06

C#窗口抖動

2009-08-31 14:01:50

C#創建一個文件

2009-09-09 12:55:59

C# TextBox事

2009-09-03 16:38:49

C#回車鍵事件

2009-10-09 09:07:40

C#委托和事件

2009-07-22 17:15:04

C#實現

2024-05-14 08:03:51

C#EventArgs?屬性

2009-08-19 14:15:42

C# 復合控件

2011-09-16 10:00:56

C++

2009-08-05 16:04:27

C# Actor模型

2009-08-26 15:53:42

C#數據訪問XML

2009-08-25 01:46:00

C# WINDOWS服

2011-07-18 10:45:55

C#SQL Server數

2011-07-18 10:01:59

C# ADO.NETSQL Server數

2009-08-18 10:48:25

C#事件

2009-09-11 09:11:09

2009-08-25 15:23:16

C#子線程

2009-09-01 16:03:32

C#單元測試

2009-08-31 13:53:03

C#創建一個文件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本aa毛片a级毛片免费观看 | 中文字幕视频在线观看 | 亚洲精品久久久 | 国产精品免费在线 | 在线国产一区 | 天天拍天天草 | 国产乱码精品一区二区三区忘忧草 | 天堂在线中文 | jizz亚洲人| 成人在线播放 | 亚洲精品一二三 | 成人在线播放网址 | 精品在线看| 不卡视频一区二区三区 | 国产成人精品免费 | 国产中的精品av涩差av | 久久亚洲欧美日韩精品专区 | 黄色成人在线 | 精品av | 韩日精品在线观看 | 九九综合九九 | 久久99蜜桃综合影院免费观看 | 精品免费视频 | 久久亚洲一区二区三 | 在线一区 | 99精品视频免费观看 | 国产精品免费大片 | 亚洲国产精品视频 | 99久热在线精品视频观看 | 性一交一乱一伦视频免费观看 | 精品欧美一区二区中文字幕视频 | 精品国模一区二区三区欧美 | aaa天堂| 欧美日韩精品一区二区三区四区 | 久久久青草婷婷精品综合日韩 | 99久久免费精品 | 国产福利资源在线 | 国产精品日产欧美久久久久 | 国产精品综合色区在线观看 | 亚洲成人中文字幕 | 欧美成人精品一区二区三区 |