博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大白话描述事件 [转]
阅读量:4977 次
发布时间:2019-06-12

本文共 1827 字,大约阅读时间需要 6 分钟。

 

转自:

ContractedBlock.gif
ExpandedBlockStart.gif
代码
 
//
所有订阅者【Subscriber】感兴趣的对象,也就是e,都要继承微软的EventArgs
//
本例中订阅者【也称观察者】MrMing,MrZhang他们感兴趣的e对象,就是杂志【magazine】
using
System;
public
class
PubEventArgs : EventArgs
{
public
readonly
string
magazineName;
public
PubEventArgs()
{
}
public
PubEventArgs(
string
magazineName)
{
this
.magazineName
=
magazineName;
}
}
//
发布者(Publiser)
public
class
Publisher
{
//
声明一个出版的委托
//
这里多了一个参数sender,它所代表的就是Subject,也就是监视对象,本例中就是Publisher
public
delegate
void
PublishEventHander(
object
sender, PubEventArgs e);
//
在委托的机制下我们建立以个出版事件
public
event
PublishEventHander Publish;
//
声明一个可重写的OnPublish的保护函数
protected
virtual
void
OnPublish(PubEventArgs e)
{
if
(Publish
!=
null
)
{
//
Sender = this,也就是Publisher
this
.Publish(
this
, e);
}
}
//
事件必须要在方法里去触发
public
void
issue(
string
magazineName)
{
OnPublish(
new
PubEventArgs(magazineName));
}
}
//
Subscriber 订阅者
public
class
MrMing
{
//
对事件感兴趣的事情
public
static
void
Receive(
object
sender, PubEventArgs e)
{
Console.WriteLine(sender.ToString());
Console.WriteLine(
"
嘎嘎,我已经收到最新一期的《
"
+
e.magazineName
+
"
》啦!!
"
);
}
}
public
class
MrZhang
{
//
对事件感兴趣的事情
public
static
void
Receive(
object
sender, PubEventArgs e)
{
Console.WriteLine(
"
幼稚,这么大了,还看《火影忍者》,SB小明!
"
);
Console.WriteLine(
"
这个我定的《
"
+
e.magazineName
+
"
》,哇哈哈!
"
);
}
}
class
Story
{
public
static
void
Main(
string
[] args)
{
//
实例化一个出版社
Publisher publisher
=
new
Publisher();
Console.Write(
"
请输入要发行的杂志:
"
);
string
name
=
Console.ReadLine();
if
(name
==
"
火影忍者
"
)
{
//
给这个出火影忍者的事件注册感兴趣的订阅者,此例中是小明
publisher.Publish
+=
new
Publisher.PublishEventHander(MrMing.Receive);
//
发布者在这里触发出版火影忍者的事件
publisher.issue(
"
火影忍者
"
);
}
else
{
//
给这个出火影忍者的事件注册感兴趣的订阅者,此例中是小张[另一种事件注册方式]
publisher.Publish
+=
MrZhang.Receive;
publisher.issue(
"
环球日报
"
);
}
Console.ReadKey();
}
}

 

转载于:https://www.cnblogs.com/master-zhu/archive/2010/05/07/1730023.html

你可能感兴趣的文章
Tomcat 的端口被占用的解决办法
查看>>
10. dede5.7标签调用说明
查看>>
bzoj 3207 可持久化线段树+hash
查看>>
解决 Python.h:没有那个文件或目录 错误的方法
查看>>
【原创】Hibernate通过实体类自动建表时type=MyISAM的问题
查看>>
MySQL系列(五) 锁
查看>>
编译原理:引论
查看>>
LFM 隐语义模型
查看>>
unwrapped与wrapped变量取值的问题
查看>>
[转载]---教大家如何玩转跟踪(to owner session、other session)
查看>>
如何在服务器部署JBoss
查看>>
NPOI导出EXCEL遇到换行符时,改变单元格的样式~!
查看>>
springboot 零xml集成mybatis-plus
查看>>
Desugar Scala(17) -- Option和for,以及脑子里发生的事情
查看>>
Codeforces.786B.Legacy(线段树优化建图 最短路Dijkstra)
查看>>
BZOJ.4909.[SDOI2017]龙与地下城(正态分布 中心极限定理 FFT Simpson积分)
查看>>
Flask 上下文(Context)原理解析
查看>>
php取得当前访问url文件名的几种方法
查看>>
CentOS7和CentOS6的区别
查看>>
关系型数据库事务二:隔离级别
查看>>