C#和ASP.NET之事件


  事件是一種用於類和類之間傳遞消息或觸發新的行為的編程方式。通過提供事件的句柄,能夠把控件和可執行的代碼聯系在一起,

如用戶單擊Button控件觸發Click事件后就執行相應的事件處理代碼。

  事件的聲明通過委托來實現。先定義委托,再用委托定義事件,觸發事件的過程實質是調用委托。事件聲明語法格式如下:

public delegate void EventHandler(object sender,EventArgs e);//定義委托

public event EventHandler MyEvent;//定義事件

  EventHandler委托定義了兩個參數,分別屬於object類型和EventArgs類型。如果需要更多參數,可以通過派生EventArgs類實現。

sender表示觸發事件的對象,e用於在事件中傳遞參數。例如,若用戶單擊Button按鈕,則sender表示Button按鈕,e表示Click時間參數。

  MyEvent事件使用EventHandler委托定義,其中使用了public修飾符,也可以使用private,protected等修飾符。

 

實例:在AccountEvent類中增加賬戶金額不足事件並運用事件

AccountEvent類的定義:

 1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Web;  5 
 6 
 7 public class AccountEvent  8 {  9     private string _ID; 10     private string _Name; 11     private decimal _Balance; 12     //定義Overdraw事件
13     public event EventHandler Overdraw; 14     public void OnOverDraw(object sender, EventArgs e) 15  { 16         if (Overdraw != null) 17  { 18             Overdraw(this,e); 19 
20  } 21  } 22     //存款方法
23     public void Deposit(decimal amount) 24  { 25         //先檢查存款的金額是否大於0
26         if (amount > 0) 27  { 28             _Balance += amount; 29  } 30         else
31  { 32             throw new Exception("存款的金額不能小於等於0!!"); 33  } 34  } 35     //取款方法 36     //並在此方法中加入觸發事件的代碼
37     public void Acquire(decimal amount) 38  { 39         if (amount < _Balance) 40  { 41             _Balance -= amount; 42  } 43         else
44  { 45             OnOverDraw(this, EventArgs.Empty); 46             return; 47  } 48  } 49    
50     public string ID 51  { 52         get { return _ID; } 53         set { _ID = value; } 54  } 55     public string Name 56  { 57         get { return _Name; } 58         set { _Name = value; } 59  } 60     public decimal Balance 61  { 62         get { return _Balance; } 63         set { _Balance = value; } 64  } 65     //構造方法
66     public AccountEvent(string id,string name,decimal balance) 67  { 68         _ID = id; 69         _Name = name; 70         _Balance = balance; 71 
72  } 73    
74     
75 }

 

至此,已經聲明了事件並增加了事件觸發點。但若要在ASP.NET頁面上使用事件,還需要使用運算符“+=”注冊事件,並要編寫事件處理代碼。

下面是如何運用Overdraw事件。

AccountEventPage.aspx.cs的代碼:

 1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Web;  5 using System.Web.UI;  6 using System.Web.UI.WebControls;  7 
 8 public partial class Chap3_AccountEventPage : System.Web.UI.Page  9 { 10     protected void Page_Load(object sender, EventArgs e) 11  { 12         AccountEvent accountEvent = new AccountEvent("03012", "李明", 200);//建立AccountEvent對象,賬戶初始金額為200 13         //注冊Overdraw事件
14         accountEvent.Overdraw += new EventHandler(account_OverDraw); 15         accountEvent.Acquire(400);//取款400 16 
17  } 18     //Overdraw事件處理代碼
19     private void account_OverDraw(object sender, EventArgs e) 20  { 21         Response.Write("賬戶金額不足了!!!"); 22  } 23 }

 

瀏覽AccountEventPage.aspx呈現界面如下:

 

程序說明:

當程序執行“account.Acquire(400);”時,因為對賬戶的取款金額大於賬戶金額,會執行Acquire方法中if語句的else部分,將觸發事件Overdraw;再執行account_Overdraw()方法,輸出信息“賬戶金額不足了!!!”。

 

此例子中事件運用的步驟為:

1.定義事件。

2.設置事件的觸發點。

3.使用運算符“+=”注冊事件。

4.編寫事件處理代碼。

其中1、2兩步是在類的定義中完成的,3、4步是在aspx文件中完成的的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM