帮我看看这点破事 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,看大家的笑果
转载于:https://www.cnblogs.com/techPioneer/archive/2009/05/10/1453650.html
帮我看看这点破事 EVENT相关推荐
- [Android开发那点破事]解决android.os.NetworkOnMainThreadException
昨天和女朋友换了手机,我的iPhone 4S 换了她得三星I9003.第一感觉就是好卡,果断刷机.以前是Android 2.3的系统.回来刷成了4.4. 好了,问题来了.在我用手机测试我们的APP的时 ...
- 【Android开发那点破事】解决android.os.NetworkOnMainThreadException
昨天和女朋友换了手机,我的iPhone 4S 换了她得三星I9003.第一感觉就是好卡,果断刷机.以前是Android 2.3的系统.回来刷成了4.4. 好了,问题来了.在我用手机测试我们的APP的时 ...
- 团队管理那点破事!OKR绩效、核心人才、面试、技术分享、研发流程....
今天来聊聊团队管理,可能你现在还是一线开发,没有带团队,感觉这个话题与你无关,其实不然. 程序员的职业生涯曲折,技术更新迭代快,走技术深度,走架构师路线,势必要付出常人的时间和精力.而管理则可以更好的 ...
- 关于Android蓝牙串口通信那点破事
Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的通信,简单思路就是要手机通过蓝牙发送控制指令给单片机,并作简单的控制应用.单片机的蓝牙模块连接与程序暂且略过,此文主要 ...
- 很好的学习资料-详细介绍SVM-来自matlab论坛-【关于SVM的那点破事】.mht
上网查阅资料,在matlab论坛发现了一个好长好长的好帖子,推荐给想要踏踏实实研究svm的初学者. 帖子优点: 1,详细.例如:matlab mex的设置问题,详细介绍了 mex -setup 各个选 ...
- 【Android开发那点破事】打开APP加载页面实现
今天的破事呢就说说APP加载页面的实现.一般情况下,当APP打开的时候,我们需要做很多事情,比如检查网络连接啊,初始化一些配置啊等等.我们可以让这些事情在APP完全打开之前做完,然后呢在打开的过程中显 ...
- 聊聊 Kafka 那点破事!
Kafka作为一款开源的消息引擎,很多人并不陌生,但深入其源码的同学估计不多,除非你是中间件团队消息系统维护者.但术业有专攻,市面上那么多开源框架且每个框架又经常迭代升级,花精力深入了解每一个框架源码 ...
- JAVA那点破事!并发、IO模型、集合、线程池、死锁、非阻塞、AQS....
关于Java面试,面试官一般喜欢问哪些问题? 本文对一些高频问题做了汇总,为了便于大家查找问题,了解全貌,整理个目录,我们可以快速全局了解关于 JAVA 接下来,我们逐条来看看每个问题及答案 JDK. ...
- JAVA那点破事,并发、IO模型、集合、线程池、死锁、非阻塞、AQS...
JDK.JRE.JVM 三者有什么关系? 答案: JDK(全称 Java Development Kit),Java开发工具包,能独立创建.编译.运行程序. JDK = JRE + java开发工具( ...
最新文章
- 【百度地图API】自行获取区域经纬度的工具
- macpro生成公钥并查看公钥
- Django——Model
- 一个获取a标签传值的函数
- python用map提取一个数的个十百位数_如何使用python中的map函数?
- python绝对导入_[编程基础] Python中的绝对导入与相对导入
- Ubuntu16.04 安装有道词典
- @SuppressWarnings(resource)
- server取出多个最小值 sql_sql语句,需要取出多个字段列中的最大值和最小值
- linux c select函数返回值,linux c中select使用技巧
- MacBook重装系统
- 怎么更改wifi频段_我告诉你wifi频段怎么设置
- gopl 底层编程(unsafe包)
- 【Windows 7中的凭据管理器的功能】
- java写渗透工具_常用渗透测试工具使用tips
- nodejs+vue+elementui宾馆酒店客房信息管理系统-express
- 字符串中空格相关操作
- 如何在浏览器中执行js脚本
- 计算机网络某局域网的网络设计,计算机网络课程设计+企业局域网的组建 (1)
- 妙味课堂WEB前端开发全套教程无加密版
热门文章
- postman发送json请求,使用案例
- destoon 多表联合查询时出现解析错误,parse_str函数解析错误
- vue-cli 官方模板webpack-simple的npm run dev 与npm run bulid的一些问题
- 编写一个基本的Android程序
- 入围51CTO 2009年度“最受读者欢迎的IT图书作者”评选
- AutoCAD.net: DXF群码
- [导入]在IE耗时操作中加入进度条或进度框
- java正则表达式入门文档
- Docker Day 4 Docker基础之Dockerfile语法
- Object.defineProperty与双向绑定、数据监听