帮我看看这点破事 EVENT

      //免责声明

      本人想把自己对asp.net下委托和事件的简单理解,略举了小例,
      不知道这样的委托事件,是否真的是破事。如果对事件的理解和用法错误望高人斧正,
      新手小弟莫要效尤,以免误入歧途,走火入魔

介绍

全局共4个文件:

      Alarm.cs

            是个主题类,(好像是观察者模式的一个名称),想象成一个警报中心。它负责向CCTV,BBC等各大机构提供服务

      SafetyEventArgs

            主题向观察者发送的信息参数类,包括防火指数,防洪指数

      ChannelCCTV1.aspx

            观察者,向警报中心取得数据,然后告诉各位看客。也就是三个按钮  

       ChannelCCTV1.aspx.cs

             ChannelCCTV1.aspx的逻辑    

全局目录结构

                          

 

1 先看 Alarm.cs

      

 

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// Alarm 的摘要说明
/// </summary>
public class Alarm
{
    SafetyEventArgs sea;
    public  delegate void DelegatePreAlarm(object sender, SafetyEventArgs e);
    public event DelegatePreAlarm eventAlarm;
    public void OnEvent()
    {
        System.Random rnd = new Random();
        sea = new SafetyEventArgs();
        sea.FireIndex=rnd.Next(100);
        sea.FloodIndex=rnd.Next(100);
        if (this.eventAlarm != null)
        {
            //第一个参数this将把类class Alarm传出去
            //传递给事件监听的所有方法
            //所有方法有一个标准,就是符合该事件相关的委托
            //目前委托的规范是 输出void  输入object, SafetyEventArgs;
            //符合委托的规范的所有方法都可以交给事件监听,
            //一旦这个方法(触发事件的方法OnEvent)被调用,将发送给所有的观察者
            this.eventAlarm(this, sea);
        }
    }

}

 

 

SafetyEventArgs.cs

 

 

 

 

Title

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// SafetyEventArgs 的摘要说明
/// </summary>
public class SafetyEventArgs
{

    /// <summary>
    /// 防火指数
    /// </summary>
    private int fireIndex;

    /// <summary>
    /// Gets or sets the index of the fire.
    /// </summary>
    /// <value>The index of the fire.</value>
    public int FireIndex
    {
        get { return fireIndex; }
        set { fireIndex = value; }
    }
    /// <summary>
    /// 防洪指数
    /// </summary>
    private int floodIndex;

    /// <summary>
    /// Gets or sets the index of the flood.
    /// </summary>
    /// <value>The index of the flood.</value>
    public int FloodIndex
    {
        get { return floodIndex; }
        set { floodIndex = value; }
    }

    /// <summary>
    /// Initializes a new instance of the <see cref="SafetyEventArgs"/> class.
    /// </summary>
 public SafetyEventArgs()
 {

 }

    /// <summary>
    /// Initializes a new instance of the <see cref="SafetyEventArgs"/> class.
    /// </summary>
    /// <param name="fire">The fire.</param>
    /// <param name="flood">The flood.</param>
 public SafetyEventArgs(int fire,int flood)
 {
        this.fireIndex = fire;
        this.floodIndex = flood;
 }

 

      

 

 

 

 

 

ChannelCCTV1.aspx

 

Title<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ChannelCCTV1.aspx.cs" Inherits="ChannelCCTV1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" Text="订阅综合信息" OnClick="Button1_Click" />
        <asp:Button ID="Button2" runat="server" Text="订阅防火信息" OnClick="Button2_Click"  />
        <asp:Button ID="Button3" runat="server" Text="订阅防洪信息" OnClick="Button3_Click" /> 
    </div>
    </form>
</body>
</html>


 

ChannelCCTV1.aspx.cs

 

Title

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class ChannelCCTV1 : System.Web.UI.Page
{
    private string name = "CCTV1";

    /// <summary>
    /// 声明主题
    /// </summary>
    private static Alarm alarm;
    /// <summary>
    /// 初始化主题
    /// Handles the Load event of the Page control.
    /// </summary>
    /// <param name="sender">The source of the event.</param>
    /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
    protected void Page_Load(object sender, EventArgs e)
    {
        alarm = new Alarm();
    }

    /// <summary>
    /// 这是个符合委托规范的方法
    /// 报道防火信息
    /// Reports the fire.
    /// </summary>
    /// <param name="sender">The sender.</param>
    /// <param name="e">The <see cref="SafetyEventArgs"/> instance containing the event data.</param>
    public void ReportFire(object sender, SafetyEventArgs e)
    {
        string resp = string.Format("<br>sender is:" + sender.ToString() + "<br />" + " info: fire index is:{0}" + "<br />" , e.FireIndex);
        Response.Write(resp);
        Response.Write(" by "+this.name);
    }
    /// <summary>
    /// 这是个符合委托规范的方法
    /// 报道防洪信息
    /// Reports the flood.
    /// </summary>
    /// <param name="sender">The sender.</param>
    /// <param name="e">The <see cref="SafetyEventArgs"/> instance containing the event data.</param>
    public void ReportFlood(object sender, SafetyEventArgs e)
    {
        string resp = string.Format("<br>sender is:" + sender.ToString() + "<br />" + " info: flood index is:{0}",e.FloodIndex);
        Response.Write(resp);
        Response.Write("<br> by "+this.name);
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        alarm.eventAlarm += new Alarm.DelegatePreAlarm(this.ReportFire);
        alarm.eventAlarm += new Alarm.DelegatePreAlarm(this.ReportFlood);
        alarm.OnEvent();
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        alarm.eventAlarm += new Alarm.DelegatePreAlarm(this.ReportFire);
        alarm.OnEvent();
    }
    protected void Button3_Click(object sender, EventArgs e)
    {
        alarm.eventAlarm += new Alarm.DelegatePreAlarm(this.ReportFlood);
        alarm.OnEvent();
    }
}


 

 

 

 

 

 

运行效果

 

 

                               

 

 

订阅综合效果

 

 

 

 

订阅防火信息效果

 

 

over,看大家的笑果

 

 

 

 

 

 

 

posted on 2009-05-10 15:22  好大一树  阅读(495)  评论(1编辑  收藏  举报

导航