最简单最明白的关于“事件”和“委托”的例子说明
1、一个节拍器,每3秒发出一个事件,接收者听到后说“HEARD IT”,本事例说明了怎样创建和传递事件。把下面的代码复制到控制台程序即可。
using System;
namespace wildert
{
public class Metronome
{
public event TickHandler Tick;
public EventArgs e = null;
public delegate void TickHandler(Metronome m, EventArgs e);
public void Start()
{
while (true)
{
System.Threading.Thread.Sleep(3000);
if (Tick != null)
{
Tick(this, e);
}
}
}
}
public class Listener
{
public void Subscribe(Metronome m)
{
m.Tick += new Metronome.TickHandler(HeardIt);
}
private void HeardIt(Metronome m, EventArgs e)
{
System.Console.WriteLine("HEARD IT");
}
}
class Test
{
static void Main ()
{
Metronome m = new Metronome();
Listener l = new Listener();
l.Subscribe(m);
m.Start();
}
}
}
2、进一步说明怎样传递参数
using System;
namespace wildert
{
public class TimeOfTick : EventArgs
{
private DateTime TimeNow;
public DateTime Time
{
set
{
TimeNow = value;
}
get
{
return this.TimeNow;
}
}
}
public class Metronome
{
public event TickHandler Tick;
public delegate void TickHandler(Metronome m, TimeOfTick e);
public void Start()
{
while (true)
{
System.Threading.Thread.Sleep(3000);
if (Tick != null)
{
TimeOfTick TOT = new TimeOfTick();
TOT.Time = DateTime.Now;
Tick(this, TOT);
}
}
}
}
public class Listener
{
public void Subscribe(Metronome m)
{
m.Tick += new Metronome.TickHandler(HeardIt);
}
private void HeardIt(Metronome m, TimeOfTick e)
{
System.Console.WriteLine("HEARD IT AT {0}",e.Time);
}
}
class Test
{
static void Main ()
{
Metronome m = new Metronome();
Listener l = new Listener();
l.Subscribe(m);
m.Start();
}
}
}
最简单最明白的关于“事件”和“委托”的例子说明相关推荐
- 2、简单的onclick点击事件
这篇文章讲的是简单的onclick点击事件,后面会有更详细与复杂的讲解与用法. 这个代码实现的效果就是一个简单的弹窗,点击一个按钮,弹出一个alert.看代码: <button onclick= ...
- 简单解析JavaScript的默认事件及如何阻止默认事件
简单解析JavaScript的默认事件及如何阻止默认事件 上篇文章就提到,在JavaScript中提到事件冒泡两个必不可少也要提的就是事件捕获和默认事件,现在来聊一聊什么是默认事件,及如何阻止默认事件 ...
- C#事件与委托(详解)
C#事件与委托详解[精华 多看看] Delegate delegate是C#中的一种类型,它 实际上是一个能够持有对某个方法的引用的类. 与其它的类不同,delegate类能够拥有一个签名(signa ...
- C#事件与委托详解【精华 多看看】--转载于https://www.cnblogs.com/sjqq/p/6917497.html
Delegate delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类.与其它的类不同,delegate类能够拥有一个签名(signature),并且它"只能持有与 ...
- 说说.net事件和委托。
一说到.net的事件,也许你会想都说教程满天飞,一个被说烂了的东西还有什么可以说的啊?是啊,的确有很多好文章剖析事件,比如张子阳先生的C# 中的委托和事件 重温Observer模式--热水器· ...
- C#中的事件和委托(续)
引言 如果你看过了 C#中的委托和事件 一文,我想你对委托和事件已经有了一个基本的认识.但那些远不是委托和事件的全部内容,还有很多的地方没有涉及.本文将讨论委托和事件一些更为细节的问题,包括一些大家常 ...
- 【转】C#事件和委托的理解
知乎大佬多系列 作者:Junased 链接:https://www.zhihu.com/question/28932542/answer/42769044 来源:知乎 感觉官方说法可以搜索到,我就说理 ...
- C#事件-趣谈事件与委托
事件与委托似乎很难以理解,这是因为它们的使用方式与常用的编码有很大的差别,例如通常编写的都是同步代码,调用一个类型的方法,会即刻出现方法执行的结果,这是符合逻辑的.但在某些情况中,同步代码未必满足需求 ...
- c语言sizeof char,sizeof 你真的弄明白了吗?来看看这个例子
原标题:sizeof 你真的弄明白了吗?来看看这个例子 sizeof基础 在C语言中,sizeof是一个操作符(operator),而不是函数!其用于判断数据类型或者表达式长度(所占的内存字节数).其 ...
最新文章
- pytorch .item_pytorch + SGD
- 根据矩阵变化实现基于 HTML5 的 WebGL 3D 自动布局
- Office2019 Word 新建文档豆沙绿背景色失效零时解决方案
- Reddit如何使用Memcached来存储3TB的缓存数据--转
- 将query存进数组 php,thinkphp下通过QueryList获取网站指定数据并封装成数组,存入数据库...
- 网络爬虫框架cetty的实现
- LiveVideoStack音视频技术2018年度评奖揭晓
- oracle中dbms_并发和由于DBMS中的并发导致的问题
- webpack之font-awesome
- 【数字图像处理系列二】基本概念:亮度、对比度、饱和度、锐化、分辨率
- 16款私藏多年的PC端效率小软件推荐
- SQLAlchemy session 使用问题
- java课题研究方法和技术途径_开题报告中的拟采取的研究方法技术路线和技术关键...
- 如何给pdf添加目录
- 串口的原始模式和标准模式
- 百度为手游盛世添把火
- c语言数码管显示小数点,8位数码管显示正整数和小数及解决鬼影问题
- 《面试官不讲武德》对Java初级程序猿死命摩擦Http协议
- 竞品分析(淘宝、京东)
- OpenCV - 计算相机和视频的帧速率FPS
热门文章
- java crumb_vuex中,我在index.vue组件设置的值,为什么在另外一个组件crumb.vue获取不到...
- 注意力机制Effective Approaches to Attention-based Neural Machine Translation
- java检测ping延迟_批量ping IP并检测IP延迟率和丢包率脚本
- 关于第四次财富狂潮的思考,区块链如猛虎出笼?
- 【游戏程序设计】二维游戏示例-回合制Demo
- 【调剂】中科院上海微系统与信息技术研究所2023年高校联培项目招收调剂生的通知...
- 算法与数据结构学习资料及面试
- 日本房地产泡沫经验及其借鉴
- SSD:Single Shot MultiBox Detector解读
- 简单酷炫时尚设计开场视频模板剪辑素材