日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C#事件模型的一個實例

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

C#事件模型應(yīng)用場景:假設(shè)我設(shè)計一個送貨上門的服務(wù)程序,當(dāng)要送貨時我將消息發(fā)送給送奶工或者郵遞員等。

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

 
 
 
 
  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.             //發(fā)生經(jīng)濟危機了取消Milk訂閱   
  13.             milk.UnRegister(gm);   
  14.             gm.SubmitGoods("lily", "Peter", "送貨上門");   
  15.             Console.ReadLine();   
  16.                
  17.         }   
  18.   
  19.         /// < summary>   
  20.         /// 定義一個類型用于存放發(fā)送給事件接收者的附加信息   
  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.             //創(chuàng)建線程同步鎖的私有字段   
  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.                 //顯示實現(xiàn)Remove方法   
  49.                 remove { lock (m_eventLock) { m_NewGoods -= value; } }   
  50.             }   
  51.                
  52.             //引發(fā)事件的方法,以通知訂閱者對像事件已發(fā)生。   
  53.             protected virtual void OnNewGoods(NewGoodsEventArgs e)   
  54.             {   
  55.                 EventHandler< NewGoodsEventArgs> temp = m_NewGoods;   
  56.                 if (temp != null)   
  57.                     temp(this,e);   
  58.             }   
  59.             //將輸入轉(zhuǎn)化為期望事件   
  60.             public void SubmitGoods(String from, String to, String desc)   
  61.             {   
  62.                 //構(gòu)個對象用來通知接受者信息   
  63.                 NewGoodsEventArgs e = new NewGoodsEventArgs(from,to,desc);   
  64.                 //調(diào)用虛方法通知事件已發(fā)生   
  65.                 OnNewGoods(e);   
  66.             }   
  67.         }   
  68.   
  69.           
  70.         //監(jiān)聽事件的類型   
  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.             //當(dāng)新的物品送到時執(zhí)行此方法   
  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#事件模型執(zhí)行結(jié)果:

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


當(dāng)前文章:C#事件模型的一個實例
分享網(wǎng)址:http://m.5511xx.com/article/djjeecj.html