日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

C#事件 的讲解

發(fā)布時(shí)間:2023/12/18 C# 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#事件 的讲解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、事件的本質(zhì)

事件是軟件系統(tǒng)里的兩個(gè)子系統(tǒng)之間,或者兩個(gè)模塊之間,或者兩個(gè)對(duì)象之間發(fā)送消息,并處理消息的過程。在面向?qū)ο蟮氖澜缋?#xff0c;就可以統(tǒng)一認(rèn)為是兩個(gè)對(duì)象之間的行為。

兩個(gè)對(duì)象之間發(fā)送的這種消息,對(duì)發(fā)送方來講是產(chǎn)生一個(gè)事件,對(duì)接受方來講是需要處理某個(gè)事件。這種消息可以是用戶操作產(chǎn)生的或者軟件系統(tǒng)里的某個(gè)對(duì)象產(chǎn)生的。

對(duì)象之間的事件處理

從上圖可見,對(duì)象一產(chǎn)生一個(gè)事件,這個(gè)事件發(fā)生以后需要對(duì)象二執(zhí)行某種動(dòng)作。這就是事件機(jī)制。對(duì)象一是事件的產(chǎn)生者,或者發(fā)送者;對(duì)象二是事件的接收者或者訂閱者。對(duì)象一產(chǎn)生某種消息,需要對(duì)象二響應(yīng)并處理這給消息,這就是事件的本質(zhì)。

以往的很多軟件系統(tǒng)都在采用事件機(jī)制處理很多問題。例如從最本質(zhì)的計(jì)算機(jī)體系中的軟中斷處理,到masm中的jump,到c/c++中的回調(diào)函數(shù)等等。只不過越高級(jí)的軟件系統(tǒng)處理事件或者其提供的很多處理方法越接近人的思維,而越遠(yuǎn)離機(jī)器思維。構(gòu)建軟件系統(tǒng)的方法從本質(zhì)上就是從機(jī)器思維走向人的思維的過程。

?

二、事件機(jī)制的好處

1、直接調(diào)用

采用事件機(jī)制有什么好處?事件發(fā)送者為什么不直接調(diào)用事件接受者提供的處理函數(shù)呢?

調(diào)用機(jī)制

如果所示,兩個(gè)對(duì)象之間的調(diào)用機(jī)制。對(duì)象B調(diào)用對(duì)象A的方法,可以通過函數(shù)指針或者跳轉(zhuǎn)(匯編語(yǔ)言)等實(shí)現(xiàn)。這種方法造成的結(jié)果是AB的緊密耦合,即B對(duì)A有很強(qiáng)的依賴性??梢钥闯?/span>B是事件的發(fā)布者,A是事件的響應(yīng)和處理者。不過這種機(jī)制用事件機(jī)制解釋從理論上就比較牽強(qiáng)了。同一種事物,其實(shí)現(xiàn)的思想不一樣。

現(xiàn)在假設(shè)有個(gè)對(duì)象C也要響應(yīng)B的事件。那么,按照上面的這種機(jī)制,需求修改對(duì)象B的代碼,調(diào)用對(duì)象C的方法。這樣機(jī)制造成了非常強(qiáng)的依賴關(guān)系。代碼的修改和擴(kuò)展非常麻煩。如果對(duì)象越多,這種關(guān)系越多,整個(gè)系統(tǒng)越復(fù)雜。如果一個(gè)系統(tǒng)里面對(duì)象很多,這種依賴關(guān)系也很多的情況下,這種調(diào)用關(guān)系就會(huì)十分復(fù)雜,對(duì)系統(tǒng)的健壯性和優(yōu)良性會(huì)造成影響。

2、回調(diào)機(jī)制

如果按照c#的委托思想,B需要事先提供對(duì)事件處理函數(shù)的某些回調(diào)指針。這樣,其它對(duì)象,例如A和C就去修改它的回調(diào)指針,把自己的方法聯(lián)系到上面。但是它們之間的耦合關(guān)系就比上面簡(jiǎn)單了。
回調(diào)機(jī)制

回調(diào)機(jī)制的思想已經(jīng)比較接近委托的概念。其實(shí)委托在本質(zhì)上也就和回調(diào)指針差不多,只是概念上更加高級(jí)。對(duì)象B作為事件的發(fā)布者,事先定義一些回調(diào)函數(shù)指針,然后在本地合適的地方調(diào)用這些指針指向的函數(shù)。而事件訂閱者或者處理者AC所作的就是讓給這些空指針賦值,把自己的事件處理方法賦給它,從而實(shí)現(xiàn)B調(diào)用AC的方法。

C?C++?中與委托最為相似的是函數(shù)指針。然而,函數(shù)指針只能引用靜態(tài)函數(shù),而委托可以引用靜態(tài)方法和實(shí)例方法。當(dāng)委托引用實(shí)例方法時(shí),委托不僅存儲(chǔ)對(duì)方法入口點(diǎn)的引用,還存儲(chǔ)對(duì)為其調(diào)用該方法的類實(shí)例的引用。與函數(shù)指針不同,委托是面向?qū)ο?、類型安全并且安全的?/span>

?

轉(zhuǎn)載于:https://www.cnblogs.com/jilodream/archive/2012/11/01/4222776.html

總結(jié)

以上是生活随笔為你收集整理的C#事件 的讲解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。