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

歡迎訪問 生活随笔!

生活随笔

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

C#

48. C# -- 事件

發(fā)布時間:2025/1/21 C# 86 豆豆
生活随笔 收集整理的這篇文章主要介紹了 48. C# -- 事件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

C# 事件(Event)


理論:

事件(Event) 基本上說是一個用戶操作,如按鍵、點擊、鼠標(biāo)移動等等,或者是一些出現(xiàn),如系統(tǒng)生成的通知。

應(yīng)用程序需要在事件發(fā)生時響應(yīng)事件。例如,中斷。

事件是用于進(jìn)程間通信。

通過事件使用委托 事件在類中聲明且生成,且通過使用同一個類或其他類中的委托與事件處理程序關(guān)聯(lián)。

包含事件的類用于發(fā)布事件。這被稱為 發(fā)布器(publisher) 類。

其他接受該事件的類被稱為 訂閱器(subscriber) 類。


通過事件使用委托

事件在類中聲明且生成,且通過使用同一個類或其他類中的委托與事件處理程序關(guān)聯(lián)。包含事件的類用于發(fā)布事件。這被稱為 發(fā)布器(publisher) 類。其他接受該事件的類被稱為 訂閱器(subscriber) 類。事件使用 發(fā)布-訂閱(publisher-subscriber) 模型。

發(fā)布器(publisher) 是一個包含事件和委托定義的對象。事件和委托之間的聯(lián)系也定義在這個對象中。發(fā)布器(publisher)類的對象調(diào)用這個事件,并通知其他的對象。

訂閱器(subscriber) 是一個接受事件并提供事件處理程序的對象。在發(fā)布器(publisher)類中的委托調(diào)用訂閱器(subscriber)類中的方法(事件處理程序)。

聲明事件(Event)

在類的內(nèi)部聲明事件,首先必須聲明該事件的委托類型。例如:

public delegate void BoilerLogHandler(string status);


然后,聲明事件本身,使用 event 關(guān)鍵字:


// 基于上面的委托定義事件

public event BoilerLogHandler BoilerEventLog;

上面的代碼定義了一個名為 BoilerLogHandler 的委托和一個名為 BoilerEventLog 的事件,該事件在生成的時候會調(diào)用委托。

實例 1

using?System; namespace?SimpleEvent {using?System;public?class?EventTest {//初始化value=0;private?int?value;public?delegate?void?NumManipulationHandler();//初始化ChangeNum=null;public?event?NumManipulationHandler?ChangeNum;protected?virtual?void?OnNumChanged() {if?(ChangeNum?!=?null) {ChangeNum(); }else {Console.WriteLine("Event?fired!"); } }//初始化構(gòu)造函數(shù)public?EventTest(int?n) {SetValue(n); }public?void?SetValue(int?n) {if?(value?!=?n) {value?=?n;OnNumChanged(); } } }public?class?MainClass {public?static?void?Main() {EventTest?e?=?new?EventTest(5);e.SetValue(7);e.SetValue(11);Console.ReadKey(); } } }


當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:

Event Fired!

Event Fired!

Event Fired!



實例 2

本實例提供一個簡單的用于熱水鍋爐系統(tǒng)故障排除的應(yīng)用程序。當(dāng)維修工程師檢查鍋爐時,鍋爐的溫度和壓力會隨著維修工程師的備注自動記錄到日志文件中。

using?System; using?System.IO; namespace?BoilerEventAppl{//?boiler?類class?Boiler{private?int?temp;private?int?pressure;public?Boiler(int?t,?int?p){temp?=?t;pressure?=?p;}public?int?getTemp(){return?temp;}public?int?getPressure(){return?pressure;}}//?事件發(fā)布器class?DelegateBoilerEvent{public?delegate?void?BoilerLogHandler(string?status);//?基于上面的委托定義事件public?event?BoilerLogHandler?BoilerEventLog;public?void?LogProcess(){string?remarks?=?"O.?K";Boiler?b?=?new?Boiler(100,?12);int?t?=?b.getTemp();int?p?=?b.getPressure();if(t?>?150?||?t?<?80?||?p?<?12?||?p?>?15){remarks?=?"Need?Maintenance";}OnBoilerEventLog("Logging?Info:\n");OnBoilerEventLog("Temparature?"?+?t?+?"\nPressure:?"?+?p);OnBoilerEventLog("\nMessage:?"?+?remarks);}protected?void?OnBoilerEventLog(string?message){if?(BoilerEventLog?!=?null){BoilerEventLog(message);}}}//?該類保留寫入日志文件的條款class?BoilerInfoLogger{FileStream?fs;StreamWriter?sw;public?BoilerInfoLogger(string?filename){fs?=?new?FileStream(filename,?FileMode.Append,?FileAccess.Write);sw?=?new?StreamWriter(fs);}public?void?Logger(string?info){sw.WriteLine(info);}public?void?Close(){sw.Close();fs.Close();}}//?事件訂閱器public?class?RecordBoilerInfo{static?void?Logger(string?info){Console.WriteLine(info);}//end?of?Loggerstatic?void?Main(string[]?args){BoilerInfoLogger?filelog?=?new?BoilerInfoLogger("e:\\boiler.txt");DelegateBoilerEvent?boilerEvent?=?new?DelegateBoilerEvent();boilerEvent.BoilerEventLog?+=?new?DelegateBoilerEvent.BoilerLogHandler(Logger);boilerEvent.BoilerEventLog?+=?new?DelegateBoilerEvent.BoilerLogHandler(filelog.Logger);boilerEvent.LogProcess();Console.ReadLine();filelog.Close();}//end?of?main}//end?of?RecordBoilerInfo}


當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:

Logging info:T

emperature 100

Pressure 12

Message: O. K


參考:


http://outofmemory.cn/csharp/tutorial/csharp-event.html?

轉(zhuǎn)載于:https://blog.51cto.com/57388/1656271

總結(jié)

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

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