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

推荐订阅源

Jina AI
Jina AI
T
The Blog of Author Tim Ferriss
G
Google Developers Blog
P
Privacy & Cybersecurity Law Blog
SecWiki News
SecWiki News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
Engineering at Meta
Engineering at Meta
Hugging Face - Blog
Hugging Face - Blog
PCI Perspectives
PCI Perspectives
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
The Exploit Database - CXSecurity.com
博客园_首页
Latest news
Latest news
T
Threat Research - Cisco Blogs
N
News and Events Feed by Topic
TaoSecurity Blog
TaoSecurity Blog
罗磊的独立博客
月光博客
月光博客
C
Cisco Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
Last Week in AI
Last Week in AI
Cloudbric
Cloudbric
MyScale Blog
MyScale Blog
Spread Privacy
Spread Privacy
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
P
Proofpoint News Feed
G
GRAHAM CLULEY
N
News and Events Feed by Topic
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
M
MIT News - Artificial intelligence
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
人人都是产品经理
人人都是产品经理
K
Kaspersky official blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
量子位
I
Intezer
Microsoft Azure Blog
Microsoft Azure Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
A
About on SuperTechFans
D
DataBreaches.Net
宝玉的分享
宝玉的分享
S
Security @ Cisco Blogs
Help Net Security
Help Net Security
Hacker News - Newest:
Hacker News - Newest: "LLM"

博客园 - 朱煜

项目经理与客户沟通的宜与忌 转 FileStream Read File filestream read方法 循环读取固定文件 c#描述异常处理语句try、catch、finally执行时的相互关系 C#计算文件的MD5值实例 C#获取文件MD5字符串 金旭亮老师的Scoekt编程摘要 Winfrom动态创建控件 多个文件合并成一个大文件后,无法打开,需要从以下几个方面找出问题? 腰围2尺1,2,3,4,5,6,7,8寸分别等于是多少厘米/英寸(对照表) 字符编码中的英文字母、汉字占有的字节长度。 Socket Programming in C#--Conclusion Socket Programming in C#--Server Side Socket Programming in C#--Multiple Sockets Socket Programming in C#--Getting Started Socket Programming in C#--Introduction C#中的is,as关键字 发布符合 .NET Framework 准则的事件(C# 编程指南) 在职研究生硕士学位证书查询和认证方式
委托/事件与观察者模式
朱煜 · 2013-04-26 · via 博客园 - 朱煜

委托是一个类,它定义了一种方法类型,使得方法可以像其他普通类型一样作为参数被传递,但它与普通类型的区别是,可以将多个方法实例绑定到一个委托实例上,调用的时候,依次执行。委托带来的好处是,提升程序的可扩展性,解决if/else(或Switch)的问题。

用到委托的地方: 当涉及到针对某一相同的输入,需要根据情况去执行不同的逻辑或产生不同的输出时,通常会需要if/else或者switch来实现,可以考虑引入委托。

事件实际是委托的一个封装,当把一个委托定义为某个类的成员时,如果声明为public又恐暴露给客户端随意更改,违背了封装性,声明为private,又违背了给客户端使用的本意,故而采用和普通类型对应的属性的方法来解决,event就可以看成是delegate变量的属性。形如public  event  ***delegate   ***;

 .net framework 定义的EventHandler是一种通用的委托,其接受object和EventArgs参数。为了维护事件的封装性,在类的外部,事件只提供注册和注销,不供调用,调用只能在内部进行,而内部通常有订阅事件的方法,通常以"On事件名"为名称,例如page的OnInit,OnLoad等。

Asp.net 中,事件是一块典型的应用。就拿System.Web.UI.Page类来讲,页面生命周期是由一系列事件组成,在ProcessRequest中定义了这一流程。例如,首先执行OnPreInit方法,这个方法调用了PreInit事件,如果客户端的某些函数注册了该PreInit事件,那么将会被依次执行,其他的事件同样如此。

Observer是一种设计模式。它通常用来解决对象的一对多的依赖的问题。它有2种类型,主题和观察者。主题订阅或取消观察者,当主题某一变化发生时,将通知观察者,进行Update的逻辑。这和事件的原理是一样的。

Observer模式又分为推模式和拉模式,它们的区别在于在主题发生变化时,推模式调用观察者对象,传递数据参数(数据参数包含主题的一些信息),而拉模式,主题直接将自身引用传递给观察者对象。前者麻烦在于需要定义数据参数EventArgs,但对主题对象保护比较好,至少没把引用暴露出去;后者不需要实现数据参数,但却容易引起主题被胡乱修改。.net framework定义的 EventHandler(object sender, EventArgs e)同时使用了这2种模式。