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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

关于事件

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
事件是一種使對象或類能夠提供通知的成員。客戶端可以通過提供事件處理程序為相應的事件添加可執行代碼。
下面這個代碼顯示如何將事件處理程序添加到 Button 類的實例:
?1//?@馬志遠??Copyright
?2
?3public?delegate?void?EventHandler(object?sender,?EventArgs?e);????//?使用事件,首先聲明事件對應的?委托.
?4public?class?Button?:?Control????????????????????????????????????//?繼續一個Button控件
?5{
?6????public?event?EventHandler?Click;????????//?聲明事件,?格式:修飾符+event+該事件的委托+事件命名,event的位置不可調換
?7}

?8public?class?LoginDialog?:?Form????????????????//?窗體
?9{
10????Button?OkButton;????????????????????????//?聲明一個按鈕的實例:OkButton
11????Button?CancelButton;????????????????????//?聲明另一個按鈕實例:CancelButton
12
13????public?LoginDialog()????????????????????//?一個Constructor
14????{
15????????OkButton????????????=?new?Button();
16????????OkButton.Click????????+=new?EventHandler(OkButton_Click);????//?加入事件?Click
17
18????????CancelButton????????=?new?Button();
19????????CancelButton.Click????+=new?EventHandler(CancelButton_Click);
20????}

21
22????void?OkButton_Click(object?sender,?EventArgs?e)????????????????//?委托所對應的事件處理程序?OkButton_Click
23????{
24????????//?寫上OKButton.Click的事件程序
25????}

26
27????void?CancelButton_Click(object?sender,?EventArgs?e)????????????//?委托所對應的事件處理程序?CancelButton_Click
28????{
29????????//?寫上CancelButton_Click的事件處理程序.
30????}

31}

為了創建并使用 C# 事件,必須采取以下步驟:

  • 創建或標識一個委托。如果正在定義自己的事件,還必須確保有與事件關鍵字一起使用的委托。如果已經預定義了事件(例如在 .NET Framework 中),則事件的使用者只需要知道委托的名稱。
  • 創建一個類,包含:
  • 從委托創建的事件。
  • (可選)驗證用 event 關鍵字聲明的委托實例是否存在的方法。否則,該邏輯必須放置在引發此事件的代碼中。
  • 調用此事件的方法。這些方法可以重寫一些基類功能。
  • 此類定義事件。

  • 定義一個或多個將方法連接到事件的類。所有這些類都包括:
    • 使用 += 運算符和 -= 運算符將一個或多個方法與基類中的事件關聯。
    • 將與事件關聯的方法的定義。
  • 使用此事件
    • 創建包含事件聲明的類對象。
    • 使用定義的構造函數,創建包含事件定義的類對象。
  • C# 中的“事件”是當對象發生某些有趣的事情時,類向該類的客戶提供通知的一種方法。事件最常見的用途是用于圖形用戶界面;通常,表示界面中的控件的類具有一些事件,當用戶對控件進行某些操作(如單擊某個按鈕)時,將通知這些事件。

    但是事件未必只用于圖形界面。事件為對象提供一種通常很有用的方法來發出信號表示狀態更改,這些狀態更改可能對該對象的客戶很有用。事件是創建類的重要構造塊,這些類可在大量的不同程序中重復使用。

    使用委托來聲明事件。事件是類允許客戶為其提供方法(事件發生時應調用這些方法)的委托的一種方法。事件發生時,將調用其客戶提供給它的委托。

    生活中的使用事件:例如,某字處理器可能包含打開的文檔的列表。每當該列表更改時,可能需要通知字處理器中的許多不同對象,以便能夠更新用戶界面。使用事件,維護文檔列表的代碼不需要知道需要通知誰,一旦文檔列表發生了更改,將自動調用該事件,正確通知每個需要通知的對象。使用事件提高了程序的模塊化程度。


    ??1//版權所有?(C)?2000?Microsoft?Corporation。保留所有權利。
    ??2
    ??3//?events1.cs
    ??4using?System;
    ??5namespace?MyCollections?
    ??6{
    ??7???using?System.Collections;
    ??8
    ??9???//?用于與更改通知掛鉤的委托類型。
    ?10???public?delegate?void?ChangedEventHandler(object?sender,?EventArgs?e);
    ?11
    ?12???//?一個類,該類與?ArrayList?類似,但每當列表更改時將發送
    ?13???//?事件通知。
    ?14???public?class?ListWithChangedEvent:?ArrayList?
    ?15???{
    ?16??????//?一個事件,每當列表元素更改時,客戶端可以使用該事件
    ?17??????//?來獲得通知。
    ?18??????public?event?ChangedEventHandler?Changed;
    ?19
    ?20??????//?調用?Changed?事件;每當列表更改時調用
    ?21??????protected?virtual?void?OnChanged(EventArgs?e)?
    ?22??????{
    ?23?????????if?(Changed?!=?null)
    ?24????????????Changed(this,?e);
    ?25??????}

    ?26
    ?27??????//?重寫可更改列表的某些方法;
    ?28??????//?在重寫每個方法后調用事件
    ?29??????public?override?int?Add(object?value)?
    ?30??????{
    ?31?????????int?i?=?base.Add(value);
    ?32?????????OnChanged(EventArgs.Empty);
    ?33?????????return?i;
    ?34??????}

    ?35
    ?36??????public?override?void?Clear()?
    ?37??????{
    ?38?????????base.Clear();
    ?39?????????OnChanged(EventArgs.Empty);
    ?40??????}

    ?41
    ?42??????public?override?object?this[int?index]?
    ?43??????{
    ?44?????????set?
    ?45?????????{
    ?46????????????base[index]?=?value;
    ?47????????????OnChanged(EventArgs.Empty);
    ?48?????????}

    ?49??????}

    ?50???}

    ?51}

    ?52
    ?53namespace?TestEvents?
    ?54{
    ?55???using?MyCollections;
    ?56
    ?57???class?EventListener?
    ?58???{
    ?59??????private?ListWithChangedEvent?List;
    ?60
    ?61??????public?EventListener(ListWithChangedEvent?list)?
    ?62??????{
    ?63?????????List?=?list;
    ?64?????????//?將“ListChanged”添加到“List”中的?Changed?事件。
    ?65?????????List.Changed?+=?new?ChangedEventHandler(ListChanged);
    ?66??????}

    ?67
    ?68??????//?這將在列表發生更改時調用。
    ?69??????private?void?ListChanged(object?sender,?EventArgs?e)?
    ?70??????{
    ?71?????????Console.WriteLine("This?is?called?when?the?event?fires.");
    ?72??????}

    ?73
    ?74??????public?void?Detach()?
    ?75??????{
    ?76?????????//?分離事件并刪除列表
    ?77?????????List.Changed?-=?new?ChangedEventHandler(ListChanged);
    ?78?????????List?=?null;
    ?79??????}

    ?80???}

    ?81
    ?82???class?Test?
    ?83???{
    ?84??????//?測試?ListWithChangedEvent?類。
    ?85??????public?static?void?Main()?
    ?86??????{
    ?87??????//?創建新的列表。
    ?88??????ListWithChangedEvent?list?=?new?ListWithChangedEvent();
    ?89
    ?90??????//?創建偵聽列表的更改事件的類。
    ?91??????EventListener?listener?=?new?EventListener(list);
    ?92
    ?93??????//?在列表中添加和移除項。
    ?94??????list.Add("item?1");
    ?95??????list.Clear();
    ?96??????listener.Detach();
    ?97??????}

    ?98???}

    ?99}

    100
    輸出
    This is called when the event fires.
    This is called when the event fires.
    代碼討論
    聲明事件
    ?? 若要在類內聲明事件,首先必須聲明該事件的委托類型(如果尚未聲明的話)。
    public delegate void ChangedEventHandler(object sender, EventArgs e);
    委托類型定義傳遞給處理該事件的方法的一組參數。多個事件可共享相同的委托類型,因此僅當尚未聲明任何合適的委托類型時才需要執行該步驟。
    接下來,聲明事件本身。
    public event ChangedEventHandler Changed;
    聲明事件的方法與聲明委托類型的字段類似,只是關鍵字 event 在事件聲明前面,在修飾符后面。事件通常被聲明為公共事件,但允許任意可訪問修飾符。
    調用事件?? 類聲明了事件以后,可以就像處理所指示的委托類型的字段那樣處理該事件。如果沒有任何客戶將委托與該事件掛鉤,該字段將為空;否則該字段引用應在調用該事件時調用的委托。因此,調用事件時通常先檢查是否為空,然后再調用事件。
    if (Changed != null)
    Changed(this, e);
    調用事件只能從聲明該事件的類內進行。
    與事件掛鉤?? 從聲明事件的類外看,事件像個字段,但對該字段的訪問是非常受限制的。只可進行如下操作:
    在該字段上撰寫新的委托。
    從字段(可能是復合字段)移除委托。
    使用 += 和 -= 運算符完成此操作。為開始接收事件調用,客戶代碼先創建事件類型的委托,該委托引用應從事件調用的方法。然后它使用 += 將該委托寫到事件可能連接到的其他任何委托上。
    // Add "ListChanged" to the Changed event on "List":
    List.Changed += new ChangedEventHandler(ListChanged);
    當客戶代碼完成接收事件調用后,它將使用運算符 -= 從事件移除其委托。
    // Detach the event and delete the list:
    List.Changed -= new ChangedEventHandler(ListChanged);

    轉載于:https://www.cnblogs.com/mazhiyuan/articles/286939.html

    總結

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

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