Net中事件的用法之一
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中事件的用法之一的更多相关文章
- webview中事件的用法
封装 MBProgressHud ==================================== #import "MBProgressHUD.h" @interface ...
- react.js 从零开始(五)React 中事件的用法
事件系统 虚拟事件对象 事件处理器将会传入虚拟事件对象的实例,一个对浏览器本地事件的跨浏览器封装.它有和浏览器本地事件相同的属性和方法,包括 stopPropagation() 和 prevent ...
- Net中事件的用法之二
1.委托与事件的区别 事件对权限做了控制 1.委托可以直接调用 事件不可以直接调用 2.委托允许外面直接赋值 事件不允许外面直接赋值 2.事件与委托的实例比较 using System; using ...
- [转载]js中return的用法
一.返回控制与函数结果,语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二.返回控制,无函数结果,语法为:return; 在大多数情况下,为事件处理函 ...
- mysql中event的用法详解
一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...
- VC++ 浅谈VS2010中CMFCToolBar的用法
本文将给大家介绍Visual Studio 2010中CMFCToolBar的用法,CMFCToolBar可以让用户自定义工具栏图标,使用静态成员函数SetUserImages()将一个CMFCToo ...
- jQuery中on()方法用法实例详解
这篇文章主要介绍了jQuery中on()方法用法,实例分析了on()方法的功能及各种常见的使用技巧,并对比分析了与bind(),live(),delegate()等方法的区别,需要的朋友可以参考下 本 ...
- 转delphi中nil的用法
转自:http://blog.csdn.net/haiou327/article/details/6666124 delphi中nil的用法 和C++中的NULL一样的意思,指空值,它和0值不一样-- ...
- JavaScript中return的用法详解
JavaScript中return的用法详解 最近,跟身边学前端的朋友了解,有很多人对函数中的this的用法和指向问题比较模糊,这里写一篇博客跟大家一起探讨一下this的用法和指向性问题. 1定义 t ...
随机推荐
- iOS 学习资料Blog 技术论坛等,不断添加中。。。。
iOS 学习资料整理 http://www.jianshu.com/p/dc81698a873c 中文 iOS/Mac 开发博客列表 https://github.com/tangqiaobo ...
- NSSet和NSMutableSet - By吴帮雷
1.NSSet的使用 [NSSet setWithSet:(NSSet *)set]; 用另外一个set对象构造 [NSSet setWithArray:(NSArray *)array];用数组构造 ...
- Docker consul的容器服务更新与发现(超详细配图)
Docker consul的容器服务更新与发现 1.概述 2.部署 1.概述: (1)什么是服务注册与发现: 服务注册与发现是微服务架构中不可或缺的重要组件.起初服务都是单节点的,不保障高可用性,也不 ...
- JavaWeb项目中斜杠(/)表示web工程、webapps的场景
"/"代表当前web工程的常见应用场景 ①.ServletContext.getRealPath(String path)获取资源的绝对路径 /** * 1.ServletCont ...
- C#字符串Unicode转义序列编解码
C#字符串Unicode转义序列编解码 在开发过程中时常会遇到"\Uxxxx"格式表示的字符,实际上"xxxx"是字符的Unicode码的十六进制表示方式.这种 ...
- Java 8 stream的详细用法
话不多说,直接看代码演示 /** * @description: stream 练习 * @author: hwx * @date: 2022/02/10 **/ public class strea ...
- Docker配置Pytorch深度学习环境
拉取镜像 $ docker pull pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel 查看本地已有镜像 $ docker images 创建容器 $ docke ...
- 举例说明EF CORE中模型之间的一对多、多对多关系的实现
该例子是我临时想出来的,不具有任何的实际意义.类图如图1所示. 图1 类代码: [Table("student")] public class Student { public i ...
- Pandas:各种错误
1.输出为CSV文件时,Permission denied 原因可能是: (1).构建DataFrame时没有写index参数 (2).用Dict构建最开始的数据时,value没有写成List的形式, ...
- Pycharm:运行程序时,不额外打开一个Console
每次运行程序,比如A.py,都会额外生成一个Console,排列成一排的 A(2),A(3),... 那么如何关闭呢? 答案是:在Settings->Console中,勾选 'Use exis ...