乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      .NET 中自定義事件的驅(qū)動(C#)

       goodwangLib 2014-01-01

      .NET 中自定義事件的驅(qū)動(C#)

      (Wonsoft)

          在Windows應(yīng)用的開發(fā)過程中,常常會借助Windows的事件驅(qū)動機制,自己定義事件,使應(yīng)用程序的具有更好的封裝。特別是在基于組件的應(yīng)用開發(fā)中,更能體現(xiàn)其優(yōu)越性。當(dāng)然在MFC中自定義事件是很容易的一件事,但在C#中有其特有的定義模式。

          首先定義事件是很容易的一件事,但光定義了事件,而不驅(qū)動這個事件,那么事件的定義就毫無意義。文章通過幾個實例來描述C#中自定義事件及其驅(qū)動機制。

          事件的驅(qū)動方式不同有幾種:1、成員中直接驅(qū)動;2、屬性變動時驅(qū)動。下面舉例分別說明它們的使用方法。

       

        實例1 :成員中直接驅(qū)動(參考1)

      1. // Step-1: 首先定義一個新的 EventArgs ,其中包括一個屬性,用于傳送超過100的結(jié)果值 
      2. // 要注意的是:該類要繼承自系統(tǒng)的 EventArgs 類。需要多個屬性時定義方法與 HighValue 類似。 
      3. class LevelHighArgs : EventArgs 
      4.         int _highValue = 0; 

      5.         public int HighValue 
      6.         { 
      7.             get { return _highValue; } 
      8.             set { _highValue = value; } 
      9.         } 

      10.         public LevelHighArgs(int _highValue) 
      11.         { 
      12.             this._highValue = _highValue; 
      13.         } 
      14.      
      15.   // Step-2: 處理類。在該類中定義委托,和事件處理方法。 
      16.   class AddTowInt 
      17.   { 
      18.        // 委托定義 
      19.         public delegate void LevelHigh(object sender, LevelHighArgs e); 
      20.        // 委托類型的事件處理方法 
      21.         public event LevelHigh OnLevelHigh; 

      22.         int _addedValue = 0; 
      23.         public int AddedValue 
      24.         { 
      25.             get { return _addedValue; } 
      26.             set { _addedValue = value; } 
      27.         } 

      28.         public AddTowInt() 
      29.         { } 

      30.         public void DoAdd(int a1, int a2) 
      31.         { 
      32.             _addedValue = a1 + a2; 

      33.             if (_addedValue > 100) 
      34.             { 
      35.                 LevelHighArgs lha = new LevelHighArgs(_addedValue - 100); 
      36.                  
      37.                 // 在結(jié)果 > 100 時,拋出事件 
      38.                 OnLevelHigh(this, lha); 
      39.             } 
      40.         } 
      41.  } 
      42.      
      43.     // 使用及事件的捕捉 
      44. class Program 
      45.         static void Main(string[] args) 
      46.         { 
      47.          // 計算程序?qū)ο?nbsp;
      48.             AddTowInt ati = new AddTowInt(); 
      49.             // 注冊事件處理程序 
      50.             ati.OnLevelHigh += new AddTowInt.LevelHigh(ati_OnLevelHigh); 
      51.             // 傳送測試數(shù)據(jù)。此時結(jié)果為 101 會觸發(fā)事件,可換成 23, 77 調(diào)用會看到事件沒有觸發(fā)。 
      52.             ati.DoAdd(23, 78);    // 顯示調(diào)用

      53.             Console.WriteLine(ati.AddedValue); 

      54.             Console.ReadLine(); 
      55.         } 

      56.         static void ati_OnLevelHigh(object sender, LevelHighArgs e) 
      57.         { 
      58.          // 此處 e 中可以看到有一個 HighValue 屬性,該值就是我們定義在 LevelHighArgs 中的屬性 
      59.             Console.WriteLine("結(jié)果已經(jīng)超過 100: " + e.HighValue); 
      60.         } 
      61. }

        實例2: 成員中直接驅(qū)動(參考2)

      1. //文件名:ChatServer.cs
      2. public class ChatServer
      3. {
      4.    public delegate void MyEventHandler(string msg);
      5.    public event MyEventHandler onSendMsg;
      6.    public void SendMsg()
      7.    {
      8.       onSendMsg("開始發(fā)送消息!");
      9.    }
      10. }

      11. //  文件名:Form1.cs
      12. ///////////////////////////////////
      13. //類事件的處理代碼如下
      14. private void SendMsgTest()
      15. {
      16.    //創(chuàng)建ChatServer類的實例
      17.    ChatServer f_Server;
      18.    f_Server = new Server();
      19.    f_Server.onSendMsg += new Server.MyEventHandler(this.OnSendMsg);
      20.    //調(diào)用 f_Server的SendMsg()函數(shù)
      21.    f_Server.SendMsg();
      22. }

      23. //處理 onSendMsg 事件代碼
      24. protected void OnSendMsg(string msg)
      25. {
      26.     //輸出調(diào)試信息
      27.     Console.WriteLine(msg);
      28. }

          實例3:屬性變動時驅(qū)動(參考3)

      1. namespace Test
      2. {        
      3.     class Program
      4.     {
      5.         static void Main(string[] args)
      6.         {
      7.             MonitoringNameChangement M = new MonitoringNameChangement();
      8.             M.NameChanged += new NameChanged(M_NameChanged);
      9.             while (true)
      10.             {
      11.                 Console.WriteLine("請輸入一個新的名字,您將會看到您自定義的事件會被執(zhí)行");
      12.                 M.ChangeName = Console.ReadLine();
      13.             }
      14.         }

      15.         static void M_NameChanged(string oldName, string NewName)
      16.         {
      17.             Console.WriteLine("******************************************* 名字已經(jīng)改變");
      18.             Console.WriteLine("新名字是: {0} 老名字是: {1}", NewName, oldName);
      19.             Console.WriteLine("******************************************* ");
      20.         }
      21.     
      22.     }
      23.     //定義一個監(jiān)控名字變化的委托
      24.     public delegate void NameChanged(string oldName, string NewName);
      25.     //定義一個名字監(jiān)控類
      26.     public class MonitoringNameChangement
      27.     {
      28.         private string name = "老名字";
      29.         public string ChangeName{
      30.             set
      31.             {
      32.                 //如果輸入的是全新的名字,則會調(diào)用監(jiān)控名字的事件,并且存儲新名字
      33.                 if (name != value)
      34.                 {
      35.                     NameChanged(name, value);
      36.                     name = value;
      37.                 }
      38.             }
      39.             get
      40.             { 
      41.                 return name;
      42.             }
      43.         }
      44.         //監(jiān)控名字的事件
      45.         public event NameChanged NameChanged;
      46.     }
      47. }

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多