//免责声明

本人想把自己对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,看大家的笑果

转载于:https://www.cnblogs.com/techPioneer/archive/2009/05/10/1453650.html

帮我看看这点破事 EVENT相关推荐

  1. [Android开发那点破事]解决android.os.NetworkOnMainThreadException

    昨天和女朋友换了手机,我的iPhone 4S 换了她得三星I9003.第一感觉就是好卡,果断刷机.以前是Android 2.3的系统.回来刷成了4.4. 好了,问题来了.在我用手机测试我们的APP的时 ...

  2. 【Android开发那点破事】解决android.os.NetworkOnMainThreadException

    昨天和女朋友换了手机,我的iPhone 4S 换了她得三星I9003.第一感觉就是好卡,果断刷机.以前是Android 2.3的系统.回来刷成了4.4. 好了,问题来了.在我用手机测试我们的APP的时 ...

  3. 团队管理那点破事!OKR绩效、核心人才、面试、技术分享、研发流程....

    今天来聊聊团队管理,可能你现在还是一线开发,没有带团队,感觉这个话题与你无关,其实不然. 程序员的职业生涯曲折,技术更新迭代快,走技术深度,走架构师路线,势必要付出常人的时间和精力.而管理则可以更好的 ...

  4. 关于Android蓝牙串口通信那点破事

    Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的通信,简单思路就是要手机通过蓝牙发送控制指令给单片机,并作简单的控制应用.单片机的蓝牙模块连接与程序暂且略过,此文主要 ...

  5. 很好的学习资料-详细介绍SVM-来自matlab论坛-【关于SVM的那点破事】.mht

    上网查阅资料,在matlab论坛发现了一个好长好长的好帖子,推荐给想要踏踏实实研究svm的初学者. 帖子优点: 1,详细.例如:matlab mex的设置问题,详细介绍了 mex -setup 各个选 ...

  6. 【Android开发那点破事】打开APP加载页面实现

    今天的破事呢就说说APP加载页面的实现.一般情况下,当APP打开的时候,我们需要做很多事情,比如检查网络连接啊,初始化一些配置啊等等.我们可以让这些事情在APP完全打开之前做完,然后呢在打开的过程中显 ...

  7. 聊聊 Kafka 那点破事!

    Kafka作为一款开源的消息引擎,很多人并不陌生,但深入其源码的同学估计不多,除非你是中间件团队消息系统维护者.但术业有专攻,市面上那么多开源框架且每个框架又经常迭代升级,花精力深入了解每一个框架源码 ...

  8. JAVA那点破事!并发、IO模型、集合、线程池、死锁、非阻塞、AQS....

    关于Java面试,面试官一般喜欢问哪些问题? 本文对一些高频问题做了汇总,为了便于大家查找问题,了解全貌,整理个目录,我们可以快速全局了解关于 JAVA 接下来,我们逐条来看看每个问题及答案 JDK. ...

  9. JAVA那点破事,并发、IO模型、集合、线程池、死锁、非阻塞、AQS...

    JDK.JRE.JVM 三者有什么关系? 答案: JDK(全称 Java Development Kit),Java开发工具包,能独立创建.编译.运行程序. JDK = JRE + java开发工具( ...

最新文章

  1. 【百度地图API】自行获取区域经纬度的工具
  2. macpro生成公钥并查看公钥
  3. Django——Model
  4. 一个获取a标签传值的函数
  5. python用map提取一个数的个十百位数_如何使用python中的map函数?
  6. python绝对导入_[编程基础] Python中的绝对导入与相对导入
  7. Ubuntu16.04 安装有道词典
  8. @SuppressWarnings(resource)
  9. server取出多个最小值 sql_sql语句,需要取出多个字段列中的最大值和最小值
  10. linux c select函数返回值,linux c中select使用技巧
  11. MacBook重装系统
  12. 怎么更改wifi频段_我告诉你wifi频段怎么设置
  13. gopl 底层编程(unsafe包)
  14. 【Windows 7中的凭据管理器的功能】
  15. java写渗透工具_常用渗透测试工具使用tips
  16. nodejs+vue+elementui宾馆酒店客房信息管理系统-express
  17. 字符串中空格相关操作
  18. 如何在浏览器中执行js脚本
  19. 计算机网络某局域网的网络设计,计算机网络课程设计+企业局域网的组建 (1)
  20. 妙味课堂WEB前端开发全套教程无加密版

热门文章

  1. postman发送json请求,使用案例
  2. destoon 多表联合查询时出现解析错误,parse_str函数解析错误
  3. vue-cli 官方模板webpack-simple的npm run dev 与npm run bulid的一些问题
  4. 编写一个基本的Android程序
  5. 入围51CTO 2009年度“最受读者欢迎的IT图书作者”评选
  6. AutoCAD.net: DXF群码
  7. [导入]在IE耗时操作中加入进度条或进度框
  8. java正则表达式入门文档
  9. Docker Day 4 Docker基础之Dockerfile语法
  10. Object.defineProperty与双向绑定、数据监听