利用EventHandler系统委托,触发Event
最近一直在研究委托与事件,下面是我的个人理解
- NOTE:参考了张子阳的思想,各位大佬可以看看http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html
- 1.事件要有委托,参数,事件
- 2.委托可以自己定义:public delegate void Boli(object sender,BoliEventAgrs e);
- 也可以利用EventHandler进行操作,本次使用的是此方法:
- 前提要声明参数(BoliEventAgrs),此类继承EventArgs而且是必须的;
class BoliEventAgrs : EventArgs//继承系统事件参数接口
{
public readonly int tem;
public BoliEventAgrs(int tem)
{
this.tem = tem;
}
}
- public event EventHandler<BoliEventAgrs> BoliWaterEvent;
- EventHandler是系统自己的带参委托定义为: public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
- BoliEventAgrs为委托参数,也是事件需要的参数;
- BoliWaterEvent为事件名字;
- 3.委托,参数,事件都有啦,下面就是写具体方法了,就是你的事件是什么事件,需要干啥的,
- 两步走,订阅也就是注册事件,执行触发事件的方法
//注册
boli.BoliWaterEvent += boli1.Alarm;
boli.BoliWaterEvent += boli1.Alarm1;
//执行
boli.Boliwater();
4。效果

5.下面是完整代码
using System; namespace DelegateEventObserver
{
class Program
{
static void Main(string[] args)
{
a boli = new a();
b boli1 = new b();
boli.BoliWaterEvent += boli1.Alarm;
boli.BoliWaterEvent += boli1.Alarm1;
boli.Boliwater();
Console.ReadKey();
}
}
class BoliEventAgrs : EventArgs//继承系统事件参数接口
{
public readonly int tem;
public BoliEventAgrs(int tem)
{
this.tem = tem;
}
}
class a
{
//public delegate void Boli(object sender,BoliEventAgrs e);
public event EventHandler<BoliEventAgrs> BoliWaterEvent;//BoliEventAgrs 为委托参数
public void Boliwater()
{
for (int i=; i<;i++)
{
if (i>)
{
BoliEventAgrs e = new BoliEventAgrs(i);
if (BoliWaterEvent != null)
{
BoliWaterEvent(this, e);
}
}
}
}
}
/// <summary>
/// 委托方法,事件注册方法,参数e为 控制温度
/// </summary>
class b
{
public void Alarm(object sender,BoliEventAgrs e)
{
if (e.tem>)
{
Console.WriteLine("水温{0}",e.tem);
}
}
public void Alarm1(object sender, BoliEventAgrs e)
{
if (e.tem >)
{
Console.WriteLine("水温{0},马上开啦", e.tem);
}
}
}
}
利用EventHandler系统委托,触发Event的更多相关文章
- JavaScript------事件委托(event delegation)
简单的说,事件委托(event delegation)是在DOM上层(也就是在触发事件的元素的父元素上)定义事件的处理程序,而不是定义在触发事件的元素本身上. 首先我们来举这样一个例子:我有N个li元 ...
- C#利用事件与委托进行窗体间传值简单小例子
本篇博客是利用C#委托与事件进行窗体间传值的简单小例子 委托与事件的详细解释大家可以参照张子阳的博客: http://www.tracefact.net/CSharp-Programming/Dele ...
- C#系统委托之Action And Func
Action Action<T> Func Func<T> Action:封装一个方法,该方法不具有参数并且不返回值 public delegate void Action() ...
- 利用win7系统自带的dos命令把笔记本无线网卡当无线路由器(无线AP发射器)
利用win7系统自带的dos命令把笔记本无线网卡当无线路由器(无线AP发射器). 1.打开win7开始菜单,找到命令提示符选项,以管理员身份运行cmd.2.在命令行上输入:netsh wlan set ...
- 利用windows系统ftp命令编写的BAT文件上传[转]
利用windows系统ftp命令编写的BAT文件上传[转] 利用windows系统ftp命令编写的BAT文件上传[转] 在开发中往往需要将本地的程序上传到服务器,而且用惯了linux命令的人来说.在w ...
- 利用Ossim系统进行主机漏洞扫描
利用Ossim系统进行主机漏洞扫描 企业中查找漏洞要付出很大的努力,不能简单的在服务器上安装一个漏洞扫描软件那么简单,那样起不了多大作用.这并不是因为企业中拥有大量服务器和主机设备,这些服务器和设备又 ...
- JSON序列化及利用SqlServer系统存储过程sp_send_dbmail发送邮件(一)
JSON序列化 http://www.cnblogs.com/yubaolee/p/json_serialize.html 利用SqlServer系统存储过程sp_send_dbmail发送邮件(一) ...
- 利用CentOS系统IPtables防火墙添加网站IP白名单
参考博文: 利用CentOS系统IPtables防火墙添加360网站卫士节点IP白名单 centos6.5添加白名单如下: 在防火墙 配置文件中加入白名单 ip -A INPUT -s 183.13 ...
- 看我是如何利用升级系统一键GetShell
i春秋作家:小猪 原文来自:看我是如何利用升级系统一键GetShell 漏洞名称:看我是如何利用升级系统一键GetShell 程序下载地址:https://pan.baidu.com/s/1VdoPL ...
随机推荐
- Linux本地yum源配置以及使用yum源安装gcc编译环境
本文档是图文安装本地yum源的教程,以安装gcc编译环境为例. 适用范围:所有的cetos,红帽,fedroa版本 适用人群:有一点linux基础的小白 范例系统版本:CentOS Linux rel ...
- centos的nginx如何访问本地共享文件夹的文件 nginx访问404,403问题
关键挂载 sudo vmhgfs-fuse .host:/musings /home/xxx -o allow_other,uid=0,gid=0
- 【爬虫】如何用python+selenium网页爬虫
一.前提 爬虫网页(只是演示,切勿频繁请求):https://www.kaola.com/ 需要的知识:Python,selenium 库,PyQuery 参考网站:https://selenium- ...
- ionic页面间跳转的动画实现
1. 在<ion-view>标签中加入: nav-direction="back"或nav-direction="forward" 2.用$stat ...
- cordova闪屏插件插件使用:cordova-plugin-splashscreen
欢迎页本地插件,默认建议包含.启动本地应用时显示指定的图片(启动页) 1. 添加插件:cordova plugin add cordova-plugin-splashscreen 2. 调用方法:
- 【NOIp2004提高组】食虫算 题解
所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 + 8468#6633 44445509678 其中#号代表被 ...
- 【项目经验】Mockito教程
一.教程 转载:https://blog.csdn.net/sdyy321/article/details/38757135/ 官网: http://mockito.org API文档:http:// ...
- 常规DP专题练习
POJ2279 Mr. Young's Picture Permutations 题意 Language:Default Mr. Young's Picture Permutations Time L ...
- python 写入文件形式
写入文件的不只是文本,还有二进制等,字节流是什么样式关系到能否写入文件. 以获取网页写入文件操作示例: response = requests.get("http://www.baidu.c ...
- IAR project build with command line
The simple way is that using iarbuild.exe project.eww -build Release/Debug Release/Debug is the con ...