最近一直在研究委托与事件,下面是我的个人理解

  • 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;
    }
    }
  1. public event EventHandler<BoliEventAgrs> BoliWaterEvent;
  2. EventHandler是系统自己的带参委托定义为:   public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
  3. BoliEventAgrs为委托参数,也是事件需要的参数;
  4. BoliWaterEvent为事件名字;
  5. 3.委托,参数,事件都有啦,下面就是写具体方法了,就是你的事件是什么事件,需要干啥的,
  6. 两步走,订阅也就是注册事件,执行触发事件的方法
//注册
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的更多相关文章

  1. JavaScript------事件委托(event delegation)

    简单的说,事件委托(event delegation)是在DOM上层(也就是在触发事件的元素的父元素上)定义事件的处理程序,而不是定义在触发事件的元素本身上. 首先我们来举这样一个例子:我有N个li元 ...

  2. C#利用事件与委托进行窗体间传值简单小例子

    本篇博客是利用C#委托与事件进行窗体间传值的简单小例子 委托与事件的详细解释大家可以参照张子阳的博客: http://www.tracefact.net/CSharp-Programming/Dele ...

  3. C#系统委托之Action And Func

    Action Action<T> Func Func<T> Action:封装一个方法,该方法不具有参数并且不返回值 public delegate void Action() ...

  4. 利用win7系统自带的dos命令把笔记本无线网卡当无线路由器(无线AP发射器)

    利用win7系统自带的dos命令把笔记本无线网卡当无线路由器(无线AP发射器). 1.打开win7开始菜单,找到命令提示符选项,以管理员身份运行cmd.2.在命令行上输入:netsh wlan set ...

  5. 利用windows系统ftp命令编写的BAT文件上传[转]

    利用windows系统ftp命令编写的BAT文件上传[转] 利用windows系统ftp命令编写的BAT文件上传[转] 在开发中往往需要将本地的程序上传到服务器,而且用惯了linux命令的人来说.在w ...

  6. 利用Ossim系统进行主机漏洞扫描

    利用Ossim系统进行主机漏洞扫描 企业中查找漏洞要付出很大的努力,不能简单的在服务器上安装一个漏洞扫描软件那么简单,那样起不了多大作用.这并不是因为企业中拥有大量服务器和主机设备,这些服务器和设备又 ...

  7. JSON序列化及利用SqlServer系统存储过程sp_send_dbmail发送邮件(一)

    JSON序列化 http://www.cnblogs.com/yubaolee/p/json_serialize.html 利用SqlServer系统存储过程sp_send_dbmail发送邮件(一) ...

  8. 利用CentOS系统IPtables防火墙添加网站IP白名单

    参考博文: 利用CentOS系统IPtables防火墙添加360网站卫士节点IP白名单 centos6.5添加白名单如下: 在防火墙 配置文件中加入白名单  ip -A INPUT -s 183.13 ...

  9. 看我是如何利用升级系统一键GetShell

    i春秋作家:小猪 原文来自:看我是如何利用升级系统一键GetShell 漏洞名称:看我是如何利用升级系统一键GetShell 程序下载地址:https://pan.baidu.com/s/1VdoPL ...

随机推荐

  1. No matching authentication protocol

    java 连接oracle数据库: 之前连接公司的oracle数据库没有问题,但客户提供的是oracle12C版本的,连接就报 :No matching authentication protocol ...

  2. Java 关键字详解(持续更新中)

    abstract:     表明类或者成员方法具有抽象熟悉.       修饰类,抽象类:         抽象类不能被实例化:         抽象类中可以有属性.方法.构造,都是用来给子类继承的: ...

  3. Django学习笔记之视图高级-CSV文件生成

    生成CSV文件 有时候我们做的网站,需要将一些数据,生成有一个CSV文件给浏览器,并且是作为附件的形式下载下来.以下将讲解如何生成CSV文件. 生成小的CSV文件 这里将用一个生成小的CSV文件为例. ...

  4. NGUI外包开发总结一下今天的收获

    先总结一下今天的收获:在一个脚本类中对其成员变量进行初始化时,什么时候在Awake()中,什么时候在Start()中是有讲究的. 1)当成员变量会被外部脚本引用时,尤其是该成员变量是一个自己定义的非脚 ...

  5. linux远程windows桌面

    rdesktop,例子如下,-f为全屏,-a为颜色设置 rdesktop -f -a 32 192.168.88.235

  6. bat文件与Vbs文件常用操作(获取用户输入,执行VBS文件)

    bat文件: set /P StrInput="输入数字:" echo 输入的数字为%StrInput% set /P Flg="是否执行(y/n):" IF ...

  7. python3学习笔记12(变量作用域)

    变量作用域 参考http://www.runoob.com/python3/python3-function.html Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量 ...

  8. CentOS 7系统初始化

    1. 升级系统 $ yum -y update 2.SELinux设置: 禁用 $ vi /etc/selinux/config 修改 SELINUX=disabled

  9. dubbo 用来做什么

    1.各个独立app之间的通信问题怎么解决? 2.怎么做到统一调度.协调处理. 3.如果计费模块是并发最大的模块,但是其他模块并发不是很大.则需要对计费进行负载均衡,怎么实现?

  10. Google瓦片地图URL

    http://mt2.google.cn/vt/lyrs=y&scale=2&hl=zh-CN&gl=cn&x=6891&y=3040&z=13 //含 ...