.net EventHandler 事件处理
通常定义事件 都是通过自定义委托的方式来实现, 今天使用EventHandler 委托来定义事件:
public class NewMailEventArgs : EventArgs
{ private readonly string m_from;
private readonly string m_to;
private readonly string m_subject; public NewMailEventArgs(string from, string to, string subject)
{
m_from = from;
m_to = to;
m_subject = subject;
} public string From { get { return m_from; } }
public string To { get { return m_to; } }
public string Subject { get { return m_subject; } } } //定义事件成员
public class MailManager
{
public event EventHandler<NewMailEventArgs> NewMail; public virtual void OnNewMail(NewMailEventArgs e)
{
//Volatile线程 Threading.Tasks
EventHandler<NewMailEventArgs> temp = Volatile.Read(ref NewMail); if (temp != null)
{
temp(this, e);
}
} public void SimulateNewMail(string from, string to, string subject)
{
//构造一个对象来容纳想传给通知接受者的信息
NewMailEventArgs e = new NewMailEventArgs(from, to, subject); //调用虚方法通知对象事件已发生
//如果没有类型重写该方法,我们的对象将通知事件的所有等级对象
OnNewMail(e);
} } public sealed class Fax {
/// <summary>
/// 将MailManager 对象传给构造器
/// </summary>
/// <param name="mail"></param>
public Fax(MailManager mail)
{
mail.NewMail += FaxMsg;
} /// <summary>
/// 注销事件
/// </summary>
/// <param name="mail"></param>
public void UnFax(MailManager mail)
{
mail.NewMail -= FaxMsg;
} //新电子邮件到达时,mailManager调用这个方法
public void FaxMsg(object sender, NewMailEventArgs e)
{
Console.WriteLine("Faxing mail message:");
Console.WriteLine(" From={0},To={1},Subject={2}", e.From, e.To, e.Subject);
} } static void Main(string[] args)
{ MailManager mail = new MailManager(); Fax fax = new Fax(mail); mail.SimulateNewMail("from0", "to1", "subject2"); }
.net EventHandler 事件处理的更多相关文章
- CQRS框架:AxonFramework 之 Hello World
Command Query Responsibility Segregation,CQRS 这个架构好象最近博客园里讨论得比较多,有几篇园友的文章很有深度,推荐阅读: CQRS架构简介 浅谈命令查询职 ...
- jQuery操作Dom、jQuery事件机制、jQuery补充部分
jQuery操作Dom: 修改属性: //使用attr()方法 //attr(name, value) //name:要修改的属性的属性名 //value:对应的值 //attr方法,如果当前标签有要 ...
- C#的反射机制
using System; using System.Collections; using System.Collections.Generic; using System.IO; using Sys ...
- webkit内核分析之 Frame
参考地址:http://blog.csdn.net/dlmu2001/article/details/6164873 1. 描述 Frame类是WebCore内核同应用之间联系的一个重要的类.它 ...
- [转]Geoserver全面了解
From:http://www.cnblogs.com/ada-zheng/archive/2013/07/16/3192921.html Geoserver是一个功能齐全,遵循OGC开放标准的开源W ...
- Sliverlight之 矢量绘图
目标:在两天内完成一个环形图的绘制 准备:第5章 矢量绘图 1,形状绘图(见Project11) (1)线条用什么标签表示,它有哪几个重要属性 说明: Line标签 x1 y1表示起始点x,y坐标 x ...
- 【第五篇】androidEventbus源代码阅读和分析之发送粘性事件和接收粘性事件代码分析
代码里面发送粘性事件代码如下: // 发送Sticky事件 EventBus.getDefault().postSticky(new User("soyoungboy", &quo ...
- 微信小程序基本组件概述
为了更好的理解微信小程序,本文90%文字描述来源于官网的介绍.官网原链接https://mp.weixin.qq.com/debug/wxadoc/dev/component/?t=20161222 ...
- nodejs----初期学习笔记
//一 回调函数 //require---命令//Node 使用了大量的回调函数,Node 所有 API 都支持回调函数.//例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件 ...
随机推荐
- php xss漏洞修复用手段和用到的一些函数
php xss漏洞修复用到的一些函数 $text = '<p>"Test paragraph".</p><!-- Comment --> < ...
- curl_setopt设置发送cookie信息
1.php curl访问会话传递问题 curl_setopt($ch , CURLOPT_COOKIE , 'PHPSESSID=A7281E0926CB37D791AD464CDD646CF2') ...
- sql语句中避免使用mysql函数,提升mysql处理能力。
如下sql中不要用mysql内置函数now()等,这样第一可以提高sql执行效率,第二统一程序层处理sql中时间参数,避免因服务器时间差导致问题产生. 使用PDO预处理,第一可以提高sql效率,第二可 ...
- 四、jenkins+postman+newman环境搭建
前提: 搭建环境之前需要先理清楚各个环境的依赖关系,jenkins只支持windows命令行跟linux shell环境执行构建命令,而postman的测试脚本不能直接在命令行或shell环境执行,p ...
- Matplotlib 库 : 绘图和可视化
一.Matplotlib基础知识 1.1Matplotlib中的基本图表包括的元素 x轴和y轴 axis水平和垂直的轴线 x轴和y轴刻度 tick刻度标示坐标轴的分隔,包括最小刻度和最大刻度 x轴和y ...
- Rhythmk 一步一步学 JAVA (10): Freemarker 学习 1 - 入门
FreeMarker 笔记: 1. 注释: <#-- 注释内容 -#> 2.<#if condition> content1 <#else> content2 ...
- myBaits association的使用
转自:https://blog.csdn.net/victor_cindy1/article/details/50194879 >
- docker redis4.0 集群(cluster)搭建
前言 redis集群对于很多人来说非常熟悉,在前些日子,我也有一位大兄弟也发布过一篇关于在阿里云(centOS7)上搭建redis 集群的文章,虽然集群搭建的文章在网上很多,我比较喜欢这篇文章的地方是 ...
- web前端整套面试题(一)--js相关
一.单选 1.以下哪条语句会产生运行:(A) A.var obj = ( ); B.var obj = [ ]; C.var obj = { }; D.var obj = / /; B代表数组,C代表 ...
- GL_LINES & GL_LINE_STRIP & GL_LINE_LOOP
[GL_LINES] 独立的线段,下式中,p2与p3间没有连线. [GL_LINE_STRIP] 连续的线段,下式中, p2与p3会连成线段. [GL_LINE_LOOP] 参考:<计算机图形学 ...