• 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文件中完成的的。

  • 相关阅读:
    企业应用的互联网化
    企业应用开发平台GAP平台
    技术有什么用?
    Samba服务器配置
    IT从业人员需要知道的10个小秘密
    在雪豹10.6.2(Mac OS X)上安装Oracle10g
    项目经理的职责
    通过堡垒机远程连接Windows Server
    MySQL:Data truncated for column 'last_apply_time' at row 1
    当有莫名其妙的错误里, 可以
  • 原文地址:https://www.cnblogs.com/wsw-tcsygrwfqd/p/5346500.html
Copyright © 2020-2023  润新知