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

歡迎訪問 生活随笔!

生活随笔

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

C#

C#总结(二)事件Event 介绍总结

發(fā)布時間:2024/4/17 C# 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#总结(二)事件Event 介绍总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  最近在總結一些基礎的東西,主要是學起來很難懂,但是在日常又有可能會經(jīng)常用到的東西。前面介紹了 C# 的 AutoResetEvent的使用介紹, 這次介紹事件(event)。

  事件(event),對于初學者來說,確實比較神秘,難懂。但是在日常編程過程中卻經(jīng)常遇到。事件使用得當,會讓你的代碼更加整潔,也能少些很多代碼。

?

  一、Event事件,是一種封裝過的委托。

  它擁有以下三要素:

    1. 事件發(fā)行者:達到某些條件時激發(fā)事件的對象

    2. 事件訂閱者:訂閱事件并對事件發(fā)生時進行處理的對象

    3. 定義發(fā)行者和訂閱者關系,一個發(fā)行者可能會有多個訂閱者。

  事件發(fā)行者和事件訂閱者通過委托(delegate) 來實現(xiàn)發(fā)送方和接收方的事件觸發(fā)。


  它擁有哪些好處:

    在以往我們編寫訂閱這類程序中,往往采用等待機制,為了等待某件事情的發(fā)生,需要不斷地檢測事情什么時候發(fā)生,而通過事件(event),可以大大簡化了這種過程:

    1. 使用事件,可以很方便地確定程序執(zhí)行順序。

    2. 當事件驅動程序等待事件時,它不占用很多資源。事件驅動程序與過程式程序最大的不同就在于,程序不再不停地檢查輸入設備,而是呆著不動,等待消息的到來,每個輸入的消息會被排進隊列,等待程序處理它。如果沒有消息在等待,則程序會把控制交回給操作系統(tǒng),以運行其他程序。

    3. 事件簡化了編程。事件訂閱者只是簡單地將消息傳送給事件發(fā)行者,由發(fā)行者的事件驅動程序確定事件的處理方法。不必知道程序的內部訂閱觸發(fā)機制,只是需要知道如何傳遞消息即可。


  二、事件和委托的區(qū)別

    1.委托允許直接通過委托去訪問相應的處理函數(shù),而事件只能通過公布的回調函數(shù)去調用,

    2.事件只能通過“+=”,“-=”方式注冊和取消訂戶處理函數(shù),而委托除此之外還可以使用“=”直接賦值處理函數(shù)。

?

  三、事件的聲明(Event)

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

    public delegate void NumManipulationHandler(NumEventArgs e);

    然后,聲明事件本身,使用 event 關鍵字:

    // 基于上面的委托定義事件public event NumManipulationHandler ChangeNum;

    上面的代碼定義了一個名為 NumManipulationHandler 的委托和一個名為 ChangeNum 的事件,該事件是在某個值生成的時候會調用委托事件。

?

  四、實例

public class Program{public static void Main(){NumEvent even = new NumEvent(0);even.ChangeNum += EventAction.Action;even.SetValue(7);even.SetValue(11);System.Console.ReadKey();}}public class NumEvent{private int value;public delegate void NumManipulationHandler(NumEventArgs e);public event NumManipulationHandler ChangeNum;public virtual void OnChangeNum(NumEventArgs e){ChangeNum?.Invoke(e);}public NumEvent(int n){SetValue(n);}public void SetValue(int n){if (value != n){NumEventArgs e = new NumEventArgs(n);value = n;OnChangeNum(e);}}}public class EventAction{public static void Action(NumEventArgs e){System.Console.WriteLine("value : " + e.value);}}public class NumEventArgs : EventArgs{public int value;public NumEventArgs(int _value){this.value = _value;}}

?

總結

以上是生活随笔為你收集整理的C#总结(二)事件Event 介绍总结的全部內容,希望文章能夠幫你解決所遇到的問題。

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