C# 事件(Event) - HTML Tutorial

文章推薦指數: 80 %
投票人數:10人

C# 事件(Event) ... 事件(Event)基本上說是一個用戶操作,如按鍵、點擊、鼠標移動等等,或者是一些出現,如係統生成的通知。

應用程序需要在事件發生時響應事件。

例如, ... w3big.com Latestwebdevelopmenttutorials ☰ HTML CSS JAVASCRIPT SQL PHP BOOTSTRAP JQUERY ANGULAR XML PYTHON 简体中文繁體中文日本语한국어ไทยالعربيةPortuguêsIndonesiaEspañolItalianoDeutschFrançaisPусскийpolskiEnglish × × × × C#教程 C#教程 C#簡介 C#環境 C#程序結構 C#基本語法 C#數據類型 C#類型轉換 C#變量 C#常量 C#運算符 C#判斷 C#循環 C#封裝 C#方法 C#可空類型 C#數組(Array) C#字符串(String) C#結構(Struct) C#枚舉(Enum) C#類(Class) C#繼承 C#多態性 C#運算符重載 C#接口(Interface) C#命名空間(Namespace) C#預處理器指令 C#正則表達式 C#異常處理 C#文件的輸入與輸出 C#高級教程 C#特性(Attribute) C#反射(Reflection) C#屬性(Property) C#索引器(Indexer) C#委託(Delegate) C#事件(Event) C#集合(Collection) C#泛型(Generic) C#匿名方法 C#不安全代碼 C#多線程 C#事件(Event) 上一頁:C#委託(Delegate)下一頁:C#集合(Collection)事件(Event)基本上說是一個用戶操作,如按鍵、點擊、鼠標移動等等,或者是一些出現,如係統生成的通知。

應用程序需要在事件發生時響應事件。

例如,中斷。

事件是用於進程間通信。

通過事件使用委託事件在類中聲明且生成,且通過使用同一個類或其他類中的委託與事件處理程序關聯。

包含事件的類用於發布事件。

這被稱為發佈器(publisher)類。

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

事件使用發布-訂閱(publisher-subscriber)模型。

發佈器(publisher)是一個包含事件和委託定義的對象。

事件和委託之間的聯繫也定義在這個對像中。

發佈器(publisher)類的對象調用這個事件,並通知其他的對象。

訂閱器(subscriber)是一個接受事件並提供事件處理程序的對象。

在發佈器(publisher)類中的委託調用訂閱器(subscriber)類中的方法(事件處理程序)。

聲明事件(Event)在類的內部聲明事件,首先必須聲明該事件的委託類型。

例如:publicdelegatevoidBoilerLogHandler(stringstatus); 然後,聲明事件本身,使用event關鍵字://基於上面的委託定義事件publiceventBoilerLogHandlerBoilerEventLog; 上面的代碼定義了一個名為BoilerLogHandler的委託和一個名為BoilerEventLog的事件,該事件在生成的時候會調用委託。

實例1usingSystem; namespaceSimpleEvent { usingSystem; publicclassEventTest { privateintvalue; publicdelegatevoidNumManipulationHandler(); publiceventNumManipulationHandlerChangeNum; protectedvirtualvoidOnNumChanged() { if(ChangeNum!=null) { ChangeNum(); } else { Console.WriteLine("Eventfired!"); } } publicEventTest(intn) { SetValue(n); } publicvoidSetValue(intn) { if(value!=n) { value=n; OnNumChanged(); } } } publicclassMainClass { publicstaticvoidMain() { EventTeste=newEventTest(5); e.SetValue(7); e.SetValue(11); Console.ReadKey(); } } } 當上面的代碼被編譯和執行時,它會產生下列結果:EventFired! EventFired! EventFired! 實例2本實例提供一個簡單的用於熱水鍋爐系統故障排除的應用程序。

當維修工程師檢查鍋爐時,鍋爐的溫度和壓力會隨著維修工程師的備註自動記錄到日誌文件中。

usingSystem; usingSystem.IO; namespaceBoilerEventAppl { //boiler類classBoiler { privateinttemp; privateintpressure; publicBoiler(intt,intp) { temp=t; pressure=p; } publicintgetTemp() { returntemp; } publicintgetPressure() { returnpressure; } } //事件發佈器classDelegateBoilerEvent { publicdelegatevoidBoilerLogHandler(stringstatus); //基於上面的委託定義事件publiceventBoilerLogHandlerBoilerEventLog; publicvoidLogProcess() { stringremarks="O.K"; Boilerb=newBoiler(100,12); intt=b.getTemp(); intp=b.getPressure(); if(t>150||t<80||p<12||p>15) { remarks="NeedMaintenance"; } OnBoilerEventLog("LoggingInfo:\n"); OnBoilerEventLog("Temparature"+t+"\nPressure:"+p); OnBoilerEventLog("\nMessage:"+remarks); } protectedvoidOnBoilerEventLog(stringmessage) { if(BoilerEventLog!=null) { BoilerEventLog(message); } } } //該類保留寫入日誌文件的條款classBoilerInfoLogger { FileStreamfs; StreamWritersw; publicBoilerInfoLogger(stringfilename) { fs=newFileStream(filename,FileMode.Append,FileAccess.Write); sw=newStreamWriter(fs); } publicvoidLogger(stringinfo) { sw.WriteLine(info); } publicvoidClose() { sw.Close(); fs.Close(); } } //事件訂閱器publicclassRecordBoilerInfo { staticvoidLogger(stringinfo) { Console.WriteLine(info); }//endofLogger staticvoidMain(string[]args) { BoilerInfoLoggerfilelog=newBoilerInfoLogger("e:\\boiler.txt"); DelegateBoilerEventboilerEvent=newDelegateBoilerEvent(); boilerEvent.BoilerEventLog+=new DelegateBoilerEvent.BoilerLogHandler(Logger); boilerEvent.BoilerEventLog+=new DelegateBoilerEvent.BoilerLogHandler(filelog.Logger); boilerEvent.LogProcess(); Console.ReadLine(); filelog.Close(); }//endofmain }//endofRecordBoilerInfo } 當上面的代碼被編譯和執行時,它會產生下列結果:Logginginfo: Temperature100 Pressure12 Message:O.K 上一頁:C#委託(Delegate)下一頁:C#集合(Collection)



請為這篇文章評分?