C#事件总结
前言:C#的事件也是一项非常关键的技术,必须要深刻的理解,本质上是基于委托的;
事件模型的五个组成部分:
1.事件的拥有者—— event source,对象;
2.事件的成员——event,成员;
3.事件的响应者——event subscriber,对象;
4.事件处理器——event handler,方法成员——本质上是一个回调方法;
5.事件订阅——把事件处理器和事件关联在一起,本质上是一种以委托类型为基础的“约定”;
下面来简单举个例子感受一下事件:
使用VS自带的Timer的Elapsed事件来关联2个自定义的对象;
1 using System;
2 using System.Timers;
3
4 namespace SimpleEventTest
5 {
6 class Program
7 {
8 static void Main(string[] args)
9 {
10 Timer timer = new Timer();//实例化一个timer
11 Boy boy = new Boy();//实例化一个boy
12 Girl girl = new Girl();//实例化一个girl
13 timer.Elapsed += boy.Act;//关联事件
14 timer.Elapsed += girl.Act;
15 timer.Interval = 1000;
16 timer.Start();//运行timer,一旦满足条件自动触发被关联的方法;
17 Console.ReadLine();
18 }
19 }
20 class Boy
21 {
22 private int count = 0;
23 internal void Act(object sender, ElapsedEventArgs e)
24 {
25 count++;
26 Console.WriteLine("Boy:Jump>>>"+count);
27 }
28 }
29 class Girl
30 {
31 private int count = 0;
32 internal void Act(object sender, ElapsedEventArgs e)
33 {
34 count++;
35 Console.WriteLine("Girl:Jump>>>" + count);
36 }
37 }
38 }
运行的效果:
值得注意的一些技巧:
1.用来相应事件的方法命名最好取名有意义:比如上面的Action();
2.当我们新建一个空的Boy类时,直接先写实例boy的boy.Action,会提示红色波浪线;
此时,
自动生成Act方法,且符合事件的签名;
~~~~~~~~~~~~~~~~~~~~~~~~
以上,初步感受。
未完待续》》》
C#事件总结的更多相关文章
- JNI详解---从不懂到理解
转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...
- Jquery的点击事件,三句代码完成全选事件
先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...
- 关于 Chrome 浏览器中 onresize 事件的 Bug
我在写插件时用到了 onresize 事件,在反复地测试后发现该事件在 Chrome 及 Opera(内核基本与 Chrome 相同,以下统称 Chrome)浏览器打开时就会执行,这种情况也许不能算作 ...
- MVVM设计模式和WPF中的实现(四)事件绑定
MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
- C++中的事件分发
本文意在展现一个C++实现的通用事件分发系统,能够灵活的处理各种事件.对于事件处理函数的注册,希望既能注册到普通函数,注册到事件处理类,也能注册到任意类的成员函数.这样在游戏客户端的逻辑处理中,可以非 ...
- 移动端IOS点击事件失效解决方案
解决方案 解决办法有 4 种可供选择: 1 将 click 事件直接绑定到目标元素(即 .target)上 2 将目标元素换成 <a> 或者 button 等可点击的元素 3 将 clic ...
- Android笔记——Button点击事件几种写法
Button点击事件:大概可以分为以下几种: 匿名内部类 定义内部类,实现OnClickListener接口 定义的构造方法 用Activity实现OnClickListener接口 指定Button ...
- HTML 事件(一) 事件的介绍
本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...
- HTML 事件(二) 事件的注册与注销
本篇主要介绍HTML元素事件的注册.注销的方式. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流.事件委托 4. ...
- HTML 事件(三) 事件流与事件委托
本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...
随机推荐
- JDK源码阅读-------自学笔记(十一)(java.lang.String包装类)
核心要点 String 类对象代表不可变的Unicode字符序列,因此我们可以将String对象称为"不可变对象" String的核心就是char[]字符串,外部写的string对 ...
- 解决idea 控制台输出乱码问题:
解决idea 控制台输出乱码问题[IntelliJ IDEA 2022.1.3 (Ultimate Edition)]: 将两个地方文件编码设置成GBK 参考文档:https://blog.c ...
- synchronized锁升级过程
更过博文请关注:https://blog.bigcoder.cn JDK 1.6后锁的状态总共有四种,级别由低到高依次为:无锁.偏向锁.轻量级锁.重量级锁,这四种锁状态分别代表什么,为什么会有锁升级? ...
- 七年之痒!一个 PHP 程序员职业生涯的自述
大家好,我是码农先森. 今年刚好是我毕业的第七个年头,在婚姻感情当中都有一种「七年之痒」的说法,这次我把这个词「七年之痒」用一次在我的职业生涯复盘上.七年前我从告别校园,踏入互联网编程行业,七年后我依 ...
- go 使用 consul api filter 过滤注意点
当你的value里面有-特殊符号的时候你应该像这样使用Service == "foo-bar"
- Newtonsoft.Json 首字母小写
// 首字母小写 JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings(); jsonSerialize ...
- .Net6 winform 程序使用依赖注入
.net Blazor webassembly 和 webAPI 内建支持依赖注入, Winform 和 Console 应用虽然不带有依赖注入功能, 但增加依赖注入也很简单. 本文将示例如何为 Wi ...
- 分享一个关于Avl树的迭代器算法
1 研究过程 前段时间在研究avl树的迭代实现,在节点不使用parent指针的情况下,如何使用堆栈来实现双向地迭代.我参考了网络上的大部分迭代器实现,要么是使用了parent指针(就像c++的map容 ...
- nginx使用lua waf防火墙来做防CC配置
nginx添加lua模块 启动和安装nginx yum install -y nginx systemctl daemon-reload systemctl enable nginx #为了实验方便这 ...
- 多项分布模拟及 Seaborn 可视化教程
多项分布 简介 多项分布是二项分布的推广,它描述了在 n 次独立试验中,k 种不同事件分别出现次数的离散概率分布.与二项分布只能有两种结果(例如成功/失败)不同,多项分布可以有 k 种(k ≥ 2)及 ...