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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

事件和观察者模式

發布時間:2025/3/17 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 事件和观察者模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


這篇文章主要是用觀察者模式去理解事件


首先得清楚幾個基礎:

1.委托相當于c里面的指針

2.委托能夠動態傳遞方法

3.委托可以引用實例和靜態方法

4.委托的實質是類

5.事件是委托的集合封裝(這個就是經常有人說的事件就是多播委托,不違背面向對象的封裝特性)


觀察者模式(這里講非常經典的例子:貓叫老鼠跑)的問題

1.觀察者:老鼠。觀察的目標:貓

2.貓發出叫聲,老鼠跑(貓觸發事件,老鼠接收信息然后做出動作)


搞清楚這些接下來上菜:

(程序員秘籍:看代碼

專門針對新手和懶人模式開啟,都在注釋里面,客官請慢用


using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace EverTest {class Program{static void Main(string[] args){//創建個貓Subject sub = new Subject();//老鼠觀察貓Obs obs = new Obs(sub);//貓觸發動作的方法sub.Method();//只有 assignment、call、increment、decrement、await 和 new 對象表達式可用作語句。。。。。我把方法的'()'去掉了。。。}}//觀察者:老鼠class Obs{//老鼠害怕哈哈哈public void Haipa(object obj, EventArgs e){Console.WriteLine("老鼠害怕了,叫醒同伴");}//老鼠吃狗糧 請無視這些命名public void Chigouliang(object obj, EventArgs e){Console.WriteLine("順便吃了一口狗糧");}//跑 這里是靜態類public static void Pao(object obj, EventArgs e){Console.WriteLine("拔腿就跑。。。。");}public Obs(Subject sub){//訂閱老鼠里面的方法sub.ONCallH += new Subject.CallH(Haipa);sub.ONCallH += new Subject.CallH(Chigouliang);sub.ONCallH += new Subject.CallH(Pao);//取消或注銷方法//sub.ONCallH -= new Subject.CallH(Pao);//注意:此處必須是+=或-=,如果是=那么就會報錯:事件“EverTest.Subject.ONCallH”只能出現在 += 或 -= 的左邊(從類型“EverTest.Subject”中使用時除外)//因為‘=’在這里是賦值,而‘+=’才是訂閱//老鼠的動作如果有其他的,只要添加方法訂閱方法,如果不要該動作就注銷或取消}}//目標:貓class Subject{//定義一個委托public delegate void CallH(object obj, EventArgs e);//定義一個此委托類型的事件public event CallH ONCallH;//模擬事件觸發,如果觸發就把信息發送給觀察者老鼠public void Method(){bool falg = false;Console.WriteLine("你聽到貓叫了沒(請用y和n回答):");//隨時都有可能發生這個事件while (!falg){if (Console.ReadLine() == "y"){//貓叫了,觸發了這個事件ONCallH(this, new EventArgs());}}}} }

總結

以上是生活随笔為你收集整理的事件和观察者模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。