1.事件与委托的关系

  委托是一种类型
  事件是委托的一个实例

事件中涉及两种角色——事件发布者和事件订阅者。

  事件发布者: 触发事件的对象称为事件发布者。

事件订阅者: 捕获事件并对其做出处理的对象称为事件订阅者。

2.事件的实例说明

namespace MyEvent
{
//委托的声明
public delegate void DoSometing(); /// <summary>
/// 委托与事件的关系
/// 委托是一种类型
/// 事件是委托的一个实例
/// </summary>
public class MyEvent
{
public DoSometing doSomethingDelegate;//委托的一个变量
public event DoSometing doSomethingEvent;//一个事件,就是委托的一个变量,加上了event关键字
//事件的使用
public void Invoke()
{
if (doSomethingEvent != null)
{
doSomethingEvent();
}
}
}
}
namespace MyEvent
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("欢迎来到流星小子博客学习");
MyEvent myEvent = new MyEvent();
// myEvent.doSomethingEvent += new DoSometing(ShowSomething);
myEvent.doSomethingEvent += ShowSomething;//为事件实例化
myEvent.Invoke();//触发事件
Console.Read();
}
private static void ShowSomething()
{
Console.WriteLine("ShowSomething");
}
}
}

3. 事件的发布者与订阅者实例

//新郎官,充当事件发布者角色
public class Bridegroom
{
//自定义委托
public delegate void MarryHandler(string msg);
//定义事件
public event MarryHandler MarryEvent; //发布事件
public void OnMarriageComing(string msg)
{
if(MarryEvent != null)
{
MarryEvent(msg);
}
}
} public class Friend
{
//属性
public string Name { get; set; }
//构造函数
public Friend(string name)
{
Name = name;
}
//事件处理函数,该函数需要符合 MarryHandler委托的定义
public void SendMessage(string message)
{
//输出通知信息
Console.WriteLine(message);
//对事件做出处理
Console.WriteLine(this.Name + "收到了,到时候准时参加");
}
}
static void Main(string[] args)
{
Bridegroom bridegroom = new Bridegroom();
Friend friend1 = new Friend("张三");
Friend friend2 = new Friend("李四");
Friend friend3 = new Friend("王五"); //使用 “+=” 来订阅事件
bridegroom.MarryEvent += new Bridegroom.MarryHandler(friend1.SendMessage);
bridegroom.MarryEvent += friend2.SendMessage; //发出通知,此时只有订阅了事件的对象才能收到通知
bridegroom.OnMarriageComing("朋友门,我要结婚了,到时候准时参加婚礼!");
Console.WriteLine("---------------------------------------------"); //使用 “-=” 来取消事件订阅,此时李四将收不到通知
bridegroom.MarryEvent -= friend2.SendMessage; //使用 “+=” 来订阅事件,此时王五可以收到通知
bridegroom.MarryEvent += friend3.SendMessage;
//发出通知
bridegroom.OnMarriageComing("朋友门,我要结婚了,到时候准时参加婚礼!");
Console.Read();
}

 4. 输出结果

Net中事件的用法之一的更多相关文章

  1. webview中事件的用法

    封装 MBProgressHud ==================================== #import "MBProgressHUD.h" @interface ...

  2. react.js 从零开始(五)React 中事件的用法

    事件系统   虚拟事件对象 事件处理器将会传入虚拟事件对象的实例,一个对浏览器本地事件的跨浏览器封装.它有和浏览器本地事件相同的属性和方法,包括 stopPropagation() 和 prevent ...

  3. Net中事件的用法之二

    1.委托与事件的区别 事件对权限做了控制 1.委托可以直接调用 事件不可以直接调用 2.委托允许外面直接赋值 事件不允许外面直接赋值 2.事件与委托的实例比较 using System; using ...

  4. [转载]js中return的用法

    一.返回控制与函数结果,语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二.返回控制,无函数结果,语法为:return;  在大多数情况下,为事件处理函 ...

  5. mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...

  6. VC++ 浅谈VS2010中CMFCToolBar的用法

    本文将给大家介绍Visual Studio 2010中CMFCToolBar的用法,CMFCToolBar可以让用户自定义工具栏图标,使用静态成员函数SetUserImages()将一个CMFCToo ...

  7. jQuery中on()方法用法实例详解

    这篇文章主要介绍了jQuery中on()方法用法,实例分析了on()方法的功能及各种常见的使用技巧,并对比分析了与bind(),live(),delegate()等方法的区别,需要的朋友可以参考下 本 ...

  8. 转delphi中nil的用法

    转自:http://blog.csdn.net/haiou327/article/details/6666124 delphi中nil的用法 和C++中的NULL一样的意思,指空值,它和0值不一样-- ...

  9. JavaScript中return的用法详解

    JavaScript中return的用法详解 最近,跟身边学前端的朋友了解,有很多人对函数中的this的用法和指向问题比较模糊,这里写一篇博客跟大家一起探讨一下this的用法和指向性问题. 1定义 t ...

随机推荐

  1. 计算当前日期n天后的日期

    //计算180天后的日期//180*24*60*60*1000//更具时间戳计算n天前的日期 $(function () { var timestamp =Date.parse(new Date()) ...

  2. Maven多环境配置实战 filter

    目前在开发一个wap项目,主要有开发.测试和最终部署上线几个阶段,每个阶段对配置(数据库.日志)都有不同的设置.以前都是以开发环境为主,在测试和部署上线时由部署工程师负责修改配置并上线.但是公司并非都 ...

  3. IOS tableView 滑动删除与排序功能

    // // ViewController.m // 0429 // // Created by apple on 15/4/29. // Copyright (c) 2015年 gense. All ...

  4. 「游记」CSP-S 2021 爆零记

    推荐访问本人自建博客 \(\text{cjwen.top}\) 初赛 之前参加过「难度介于 J 组(基础组)和 S 组(提高组)之间」的 [LGR-(-13) ]SCP 2021 第一轮(初赛)模拟, ...

  5. Ubuntu service 命令

    启动指定服务 sudo service 服务名 start 停止指定服务 sudo service 服务名 stop 重启指定服务 sudo service 服务名 start 查看所有服务 sudo ...

  6. 基于GDAL库海洋表温日平均计算工具设计与实现 C++版

    技术背景 在对物理海洋数据处理过程中,表层温度是众多要素中的一种,本文书要是针对海洋表温数据批量日平均处理的一个工具设计.首先要在对当前的SST数据文件作一下简要的说明,SST全称为sea surfe ...

  7. HGAME-week2-web-wp

    hgame第二周总结 1.webpack-engine 我不懂,但是真的刚打开就出来了,一脸懵逼(wp说是sourcemap没关 hgame{D0nt_f0r9et_2_ClOs3_S0urce_m@ ...

  8. spring中容器和对象的创建流程

    容器和对象的创建流程 1.先创建容器 2.加载配置文件,封装成BeanDefinition 3.调用执行BeanFactoryPostProcessor 准备工作: 准备BeanPostProcess ...

  9. Docker容器日志的种类以及存储

    Docker 日志 Docker的日志可以分为两类: stdout标准输出日志 stdout就是标准输出里面的日志, 比如程序运行时输出在控制台的内容就会写入标准输出 原理就是当在启动进程的时候,进程 ...

  10. 重点收藏!BI数据分析工具哪家强?

    信息爆炸时代,大数据晋升为一个时髦词汇.不论是在哪个行业领域,大数据分析成为各企业备受推崇的决策工具.对于海量数据的挖掘,有助于统计事情发生的概率,帮助人们计算做某些事情成功的几率.企业正在数据的海洋 ...