C#和ASP.NET之事件

來源:互聯網
上載者:User

標籤:

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

如使用者單擊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         //先檢查存款的金額是否大於026         if (amount > 0)27         {28             _Balance += amount;29         }30         else31         {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         else44         {45             OnOverDraw(this, EventArgs.Empty);46             return;47         }48     }49    50     public string ID51     {52         get { return _ID; }53         set { _ID = value; }54     }55     public string Name56     {57         get { return _Name; }58         set { _Name = value; }59     }60     public decimal Balance61     {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對象,賬戶初始金額為20013         //註冊Overdraw事件14         accountEvent.Overdraw += new EventHandler(account_OverDraw);15         accountEvent.Acquire(400);//取款40016 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檔案中完成的的。

C#和ASP.NET之事件

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.