惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

TaoSecurity Blog
TaoSecurity Blog
T
Troy Hunt's Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Vercel News
Vercel News
T
Threatpost
G
Google Developers Blog
T
Threat Research - Cisco Blogs
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
The Exploit Database - CXSecurity.com
H
Heimdal Security Blog
Google DeepMind News
Google DeepMind News
Cyberwarzone
Cyberwarzone
T
The Blog of Author Tim Ferriss
Know Your Adversary
Know Your Adversary
Hacker News: Ask HN
Hacker News: Ask HN
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
Schneier on Security
B
Blog
V2EX - 技术
V2EX - 技术
NISL@THU
NISL@THU
C
CERT Recently Published Vulnerability Notes
W
WeLiveSecurity
C
Cybersecurity and Infrastructure Security Agency CISA
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Y
Y Combinator Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Spread Privacy
Spread Privacy
The Last Watchdog
The Last Watchdog
V
Vulnerabilities – Threatpost
N
Netflix TechBlog - Medium
Schneier on Security
Schneier on Security
F
Fortinet All Blogs
N
News | PayPal Newsroom
Attack and Defense Labs
Attack and Defense Labs
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Microsoft Security Blog
Microsoft Security Blog
S
Security @ Cisco Blogs
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
P
Privacy & Cybersecurity Law Blog
P
Proofpoint News Feed
Project Zero
Project Zero
I
Intezer
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
SecWiki News
SecWiki News
Martin Fowler
Martin Fowler

博客园 - BearOcean

LOG.ZS.0001.基于Freetype的游戏字体渲染优化思路 const 和指针 C++ 下啥时候用struct, 啥时候用class C++ 和 Java 中的变参 解决站点关键数据,状态数据,无须持久化数据的一些思路 BS程序代码与安全与基本攻击/防御模式 Struts 实现的I18N Ant 阅读笔记 进度,效率,与个人事务管理 Personal Task 1.0 MySql与Java的时间类型 数据挖掘概述 解决Thread 的关闭问题和参数传递时想到的办法. Command 模式 .Net标准控件与自定义控件(2) ToolTipButton 内网聊天工具FreeChat 2.0 FreeChat 2.0 ...大改 模型和架构 局域网聊天工具FreeChat 1.0 开发日志 内网聊天工具FreeChat Beta 为Socket写的附加方法
.Net 事件
BearOcean · 2006-01-02 · via 博客园 - BearOcean

事件是存在于类当中的一种特殊成员.
抽象上来说是一种很好理解的东西.
既是在特定情况下(如用户按下鼠标左键)激活一个事件.然后由另外一个
实体(如后台程序)通过预先建立好的联系,在得到事件已发生以后对该特
定事件进行处理.

所以事件模型需要一些必须的要素:
(1)事件源需要定义一个事件.
(2)事件源需要有一张"事件发生后通知谁"的列表.
(3)事件接收方需要定义能够接收哪些事件.
(4)事件接收方需要定义事件发生后进行何种处理的处理方法.

在C#中,事件模型是通过如下方式实现的:
在类A中申明一个事件:

class A
{
 .....
 public:
      event EventHanlder SomeEvent;
 .....
}

解释一下代码:
event:
指定一个事件时使用的关键字.

EventHanlder :
一个委托(delegate),申明如下:
public delegate void EventHandler( object sender , EventArgs e )

关于delegate,可以近似地认为是一个函数指针.
所以该"EventHanlder"实际上是希望与该事件发生联系的委托(delegate)

最后SomeEvent实际上是事件名.

event(关键字) EventHanlder(delegate) SomeEvent(事件名)

所以当我们定义一个事件:
event  EventHanlder Click 时,翻译成自然语言既是在说:我要把名为click的
事件委托给一个类型为delegate void EventHandler( object sender , EventArgs e )
的方法来处理.

第2段关键的代码:
 this.button1.Click += new System.EventHandler(this.button1_Click);
使用+=符号使事件Click与处理方法button1_Click方法关联起来.
也就是说,当Click事件被激活以后马上对button1_Click方法进行调用.

要注意的一点就是:因为事件实际上申明了要委托给型如:
void FuncName(object sender,EventArgs e)
的方法来处理.
所以button1_Click也一定要定义成:
button1_Click(object sender, EventArgs e)的形式.当然其实这些IDE都已经做好了,一般
情况下,不论是winform还是webform
只需要在方法里直接填代码就可以了.

再举一个例子:
分析正在做的项目,发现在Server.cpp中有这么一句: (C++.net)
OnRecieveData+=new AnalysisDataEventHanlder(this,&VSCServer::Recieve)
那么就是说在OnRecieveData事件与VSCServer::Recieve方法之间建立了联系.

然后在Server的基类:XSocket里找到了关于AnalysisDataEventHanlder的定义:
public __delegate int AnalysisDataEventHandler(String*)
和event的定义:
__event AnalysisDataEventHandler *OnReciveData;

仿佛事件与方法的关系已经建立了联系.
但是仍然有一点迷惑我,
那就是代码又怎么知道什么时候触发OnRecieveData事件呢?
按业务逻辑上来说,应该是在Socket接收到client发过来的消息后交给VSCServer::Recieve处理

那么是不是在 while(int i=Recieve(.....)!=0)
时激活OnReciveData.....那么这样的话又和在这里直接调用Recieve有什么关系?
是不是只是多了一个Event可以映射到多个方法而带来方便?

这个我还是不太理解 :_)