自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

走進(jìn)C#基礎(chǔ)概念之事件

開(kāi)發(fā) 后端
我們將要講述的是C#編程模型中的一個(gè)重要概念——事件,通過(guò)對(duì)事件的理解,可以更好的了解C#程序運(yùn)行機(jī)制。

事件,是C#編程模型中重要的一個(gè)概念,通過(guò)對(duì)事件的理解,可以更好的了解C#程序運(yùn)行機(jī)制。C#中的事件,可以簡(jiǎn)單的理解為類(lèi)或者對(duì)象發(fā)生了一件事,并且把這件事通知給了其他的類(lèi)或者對(duì)象,其他的類(lèi)或者對(duì)象可以根據(jù)事件的消息有所反應(yīng)。這非常類(lèi)似設(shè)計(jì)模式中的觀察者模式。

引發(fā)事件的類(lèi)或?qū)ο?,可以稱(chēng)之為事件源,注冊(cè)并對(duì)處理事件的類(lèi)或者對(duì)象可以稱(chēng)為事件訂閱者或者事件監(jiān)聽(tīng)者,我比較喜歡稱(chēng)之為事件監(jiān)聽(tīng)者。

比如:構(gòu)建一個(gè)winform應(yīng)用,在窗體Form1簡(jiǎn)單放置一個(gè)按鈕控件,然后,雙擊按鈕,則可以進(jìn)入代碼視圖中按鈕click事件處理程序。

  1. private void button1_Click(object sender, EventArgs e)        
  2.           
  3.  ///sender即表示事件源,e表示通過(guò)事件傳遞過(guò)來(lái)的消息     
  4.   } 

這時(shí),還可以打開(kāi)Form1.designer.cs,還可以找到如下代碼:

  1. this.button1.Click += new System.EventHandler(this.button1_Click); 

這行代碼表明,當(dāng)前窗體注冊(cè)了click事件(click就是Button對(duì)象的一個(gè)事件),并且用 button1_Click方法進(jìn)行了處理。EventHandler是一個(gè)委托,關(guān)于委托可參見(jiàn)我的上一篇文章C#基礎(chǔ)概念之委托

以上是對(duì)C#事件的一些簡(jiǎn)單的解釋。當(dāng)然,我們也可以自定義事件。

自定義事件,分為如下幾步:

第一步:首先在事件源對(duì)象定義事件

  1. //定義事件        
  2.  public event EventHandler myevnet; 

第二步:在事件監(jiān)聽(tīng)者,訂閱事件

  1. //事件注冊(cè)            
  2. this.myevnet+=new EventHandler(MyEventHandler); 

第三步:在事件監(jiān)聽(tīng)者,編寫(xiě)事件處理代碼:

  1. /// <summary>        
  2. /// 事件的處理     
  3.    /// </summary>        
  4. /// <param name="sender"></param>        
  5. /// <param name="e"></param>       
  6.  private void MyEventHandler(object sender, EventArgs e)        
  7. {             
  8. essageBox.Show("myevent is raised.......");     
  9.    } 

第四步:在事件源對(duì)象引發(fā)事件

  1. //判斷事件是否被注冊(cè)           
  2.   if (myevnet != null)          
  3.    {                 
  4. //引發(fā)事件              
  5.    myevnet(this.button1, new EventArgs());         
  6.     } 

這僅是個(gè)演示,供各位參考,下面給出完整代碼,方便測(cè)試

簡(jiǎn)單自定義事件,完整代碼

  1.  public partial class Form1 : Form   
  2.  {   
  3.      //定義事件   
  4.       public event EventHandler myevnet;  
  5.          public Form1()  
  6.     {   
  7.        InitializeComponent();   
  8.       //事件注冊(cè)  
  9.         this.myevnet+=new EventHandler(MyEventHandler);  
  10.          }  
  11. private void button1_Click(object sender, EventArgs e)  
  12.    {  
  13.         MessageBox.Show("button1_Click");  
  14.         //判斷事件是否被注冊(cè)  
  15.          if (myevnet != null)  
  16.          {  
  17.             //引發(fā)事件  
  18.               myevnet(this.button1, new EventArgs());  
  19.           }  
  20.       }  
  21.         /// <summary>  
  22.      /// 事件的處理      
  23.  /// </summary>  
  24.         /// <param name="sender"></param>  
  25.      /// <param name="e"></param>  
  26.   private void MyEventHandler(object sender, EventArgs e)  
  27.       {  
  28.           MessageBox.Show("myevent is raised.......");  
  29.       }  
  30.   } 

當(dāng)然,真環(huán)境下,自定義事件要比這個(gè)復(fù)雜一些,下面再舉一個(gè)例子,在事件引發(fā)時(shí),傳遞自定義的消息。

首先要自定義一個(gè)事件消息類(lèi),這個(gè)類(lèi)繼承于EventArgs

然后自定義委托,來(lái)處理事件。完整代碼如下:

事件源方面:

事件源代碼

  1.  ///自定義事件委托  
  2. public delegate void MyeventHandler(object sender, MyEventArgs e);  
  3. public partial class AddGrade : Form   
  4.  {   
  5.       //聲明事件   
  6.    public event MyeventHandler myCustomevent;   
  7.           public AddGrade()   
  8.         {  
  9.         InitializeComponent();  
  10.    }  
  11.      private void button1_Click(object sender, EventArgs e)  
  12.   {  
  13.         //dosomthing  
  14.            //事件引發(fā)  
  15.             if (myCustomevent != null)  
  16.            {  
  17. myCustomevent(thisnew MyEventArgs() {
  18.  Message = this.textBox1.Text });  
  19.           }  
  20.       }  
  21.   }  
  22. ///自定義事件消息類(lèi)  
  23.     public class MyEventArgs : EventArgs  
  24.    {  
  25.       public string Message { setget; }  
  26.    } 

事件監(jiān)聽(tīng)者方面:

事件監(jiān)聽(tīng)

  1.    public partial class EventDemo : Form  
  2.   {   
  3.     public EventDemo()   
  4.       {   
  5.            InitializeComponent();   
  6.         }   
  7. private void button1_Click(object sender, EventArgs e)  
  8.         {  
  9.        AddGrade addGrad = new AddGrade();  
  10.              //注冊(cè)事件  
  11. addGrad.myCustomevent += new MyeventHandler(addGrad_myCustomevent);  
  12.            addGrad.Show();            
  13.      }  
  14.       void addGrad_myCustomevent(object sender, MyEventArgs e)  
  15.        {  
  16.             //dosomthing  
  17.            MessageBox.Show(e.Message);  
  18.        }  
  19.       } 

原文鏈接:http://www.cnblogs.com/yangyancheng/archive/2011/04/24/2026240.html

【編輯推薦】

  1. .NET不用控件實(shí)現(xiàn)文件夾監(jiān)測(cè)系統(tǒng)
  2. 詳解C#中不同類(lèi)的類(lèi)型
  3. 淺談C#中標(biāo)準(zhǔn)Dispose模式的實(shí)現(xiàn)
  4. C#圖片處理的3種高級(jí)實(shí)用方法
  5. C# 4.0新特性:協(xié)變與逆變中的編程思想

責(zé)任編輯:彭凡 來(lái)源: 博客園
相關(guān)推薦

2011-04-25 09:22:44

C#事件

2009-08-13 18:02:50

C#基礎(chǔ)概念

2009-09-17 17:44:51

C#動(dòng)態(tài)數(shù)組

2011-04-22 09:14:26

C#委托

2011-06-08 14:22:51

延遲加載

2009-08-13 10:52:03

C#基礎(chǔ)概念

2009-08-13 11:10:32

C#基礎(chǔ)概念

2009-08-06 13:08:23

ASP.NET控件開(kāi)發(fā)

2011-04-01 09:34:18

C#奇妙函數(shù)

2015-11-06 13:59:01

JavaScript事件處理

2009-09-02 10:58:02

C#動(dòng)態(tài)數(shù)組

2009-06-22 09:23:18

事件監(jiān)聽(tīng)器

2009-08-07 17:57:26

C#定義事件應(yīng)用

2009-08-28 09:43:05

C#事件

2009-08-18 10:48:25

C#事件

2009-08-12 15:20:21

C#事件處理

2009-09-14 13:44:14

Lambda ExprC# Lambda

2009-08-25 17:49:07

C#入門(mén)

2017-06-12 10:31:17

Redis源碼學(xué)習(xí)事件驅(qū)動(dòng)

2024-06-11 00:00:30

C#編程線(xiàn)程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)