事件是一種用於類和類之間傳遞消息或觸發新的行為的編程方式。通過提供事件的句柄,能夠把控件和可執行的代碼聯系在一起,
如用戶單擊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文件中完成的的。
