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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#事件记录

發布時間:2025/7/25 C# 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#事件记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看了這么久,對于C#的事件機制還是一頭霧水。

最讓我迷惑不解的是事件的處理方法是在什么時候執行的。

看到的文檔都是說是在事件發生的時候被調用。結合看到的例程,

如果是定時的事件,我還可以理解,但是如果沒有那么明顯的事件的標志,

對于事件對于我就變成一只黑匣子了。

后來看了一篇教程,我感覺我對事件的理解錯了。原來事件并不一定是

外來的例如計時或者中斷,在C#中事件只是一種模型,使方法之間可以互相交互和

影響,建立一定的關聯,從而實現特定的功能。事實上,事件在生成的時候調用委托的。

事件生成是一個很廣泛的概念,既可以是時間,按鍵,也可以是方法的調用。(也許前者就是

方法的調用)。

下面是引用自http://www.runoob.com/csharp/csharp-event.html的例程

下面的代碼就是一個以方法調用作為事件的例子。

其中的事件就是OnBoilerEventLog()方法的調用

所以我的拙見是任何觸發包裝在event中的方法的對象都是事件

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;}}// 事件發布器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 }

對于一個問題的認識總是由淺入深的,今天看到了一篇文章,對事件又有了更深的理解。貼一下這篇文章


“事件驅動機制”里的事件和c#中的event不是一回事。就像java和c++里沒有event這個關鍵字并且不用delegate。但是它們在處理GUI程序時卻都是用事件驅動機制來完成。
從機制上講,事件就是你干了什么,你點擊了一個button,選擇了一個下拉菜單,點擊關閉按鈕。那么這個時候程序該怎么反應呢?這就看你的事件(或者說動作)有誰關心和誰關聯。
拿button為例,它有一個事件叫單擊,當單擊發生時,button會發布一個消息“我被單擊了”;在這之前關心這個問題的類會跟這個事件注冊一下,就是說我訂閱你的消息,當你事件發生時,這個消息要給我知道。而當訂閱者知道事情發生了它就會采取相應的處理也就是調用自己預先寫好的事件處理方法。
拿現實為例,出版社會發行報紙,而一個事件發生(比方某煤礦瓦斯爆炸)它會出現在報紙上,這就是一個消息;而如果你想知道發生了什么,你就要訂閱報紙,這樣每有消息,都會把報紙送到你家的郵箱;不同的人收到報紙他就會有不同的反應做出不同的處理,比方家人在那個煤礦的人和投資了那個煤礦的人就會做不同反應。
在實現上,c#是用委托做的,事件是一個特殊的委托,不用事件也能完成,但是可能會出現問題,就是有人可以繞過你這個事件發生而使用委托即事件沒發生卻可以從后臺調用你的事件處理方法,為了限制這個行為采用關鍵字event來修飾委托或者說創建了一個“事件”的概念。
而在java中,是用Listener來做的,你一個事件源負責發布消息,而關心它的類會有一個Listener并在內部編寫事件處理方法,而在事件源中addActionListener就是把外部的一個關心者注冊起來,表示別人關心你訂閱了你的消息。

鏈接:https://zhidao.baidu.com/question/50339292.html

轉載于:https://www.cnblogs.com/MalcolmMeng/p/8442975.html

總結

以上是生活随笔為你收集整理的C#事件记录的全部內容,希望文章能夠幫你解決所遇到的問題。

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