基礎系列之 5 C 委託和事件使用(參考)

2022-07-20 20:39:11 字數 2368 閱讀 8117

用乙個例子來說明事件的使用。

建立乙個簡單的類,名為filewatch,包含事件onfilechange。該類將檢查在執行應用程式的目錄(當前目錄,通常是專案名/bin/debug)下,是否存在檔案test.txt。

如果檔案被刪除或建立,都將觸發事件。

同時提供乙個方法monitorfile以不斷地查詢該檔案。

方法:在建立乙個可用事件之前,首先宣告乙個委託,放在類的外面。

public delegate void filewatcheventhandler(object sender,eventargs e);

接下來建立類filewatch。然後宣告事件,注意事件的型別即為我們之前定義的委託。

public event filewatcheventhandler filewatchevent;

現在建立方法onfilechange(),當呼叫該方法時將觸發事件:

protected virtual void onfilechange(eventargs e)

}最後,建立方法monitorfile(),

public void monitorfile()

thread.sleep(250);}}

完整**如下:

using system;

using system.threading; 

using system.io;      

namespace sample.event

public event filewatcheventhandler filewatchevent; 

protected virtual void onfilechange(eventargs e)

}  public void monitorfile()

thread.sleep(250);

}  }}}

使用:建立乙個windows應用程式來測試我們之前建立的filewatch中的事件。首先將剛才建立的專案編譯

,生成assembly:filewatch.dll,然後新增引用。當然直接新增專案引用也可以。然後在windows應用程

序中加入命名空間:

using sample.event;

然後在應用程式類中,定義乙個私有字段,型別為我們之前建立的類filewatch:

public class frmmain : system.windows.forms.form

當觸發事件時,eventhanler會傳遞sender和eventargs類的引用。eventargs類通常是在事件源和觸發事

件器之間傳遞資訊。在本例中,沒有傳遞資訊,也沒有用到eventargs類。而只是將事件新增到了listbox

中。執行結果如下:

結論:在c#中使用事件的要點:

首先,要建立委託,格式為:

public delegate void 委託名(object sender, eventargs e);

注意:委託即c裡的函式指標,在事件中由於要傳遞事件及觸發事件的物件的資訊,因此參數列是固定的。委託名一般格式是:名字+envenhandle。這樣取名比較規範。

然後,建立乙個事件字段:

public event 委託型別 事件名;

注意:event關鍵字代表事件,返回型別為委託;

再定義乙個方法,處理事件,再本例中為onfilechange(eventargs e)。在該方法中應該呼叫事件:

事件名(object ,eventargs);

這裡object一般為本身,實參應為this,eventargs應為onfilechange中傳遞過來的實參,尤其是要傳遞事件的值。

最後還要建立觸發事件的方法。例子中為monitorfile(),在其方法中,當條件滿足則呼叫onfilechange來達到觸發事件的目的。

在使用事件時,通常要定義兩個方法,乙個是和事件定義的委託簽名一致的方法,在本例中為onfilechange(object sender,eventargs e);

注意在例子中,窗體類的onfilechange和事件類的onfilechange是不同的。後者用於呼叫事件,前者則用於繫結事件。繫結事件的方法很簡單,用+=表示新增事件,-=表示刪除事件。

例子中filewatcheventsource.filewatchevent+=new sample.event.filewatcheventhandler(onfilechange);

即為新增事件。

例子中:首先執行緒啟動(thd.start()),然後呼叫monitorfile()方法。引起事件產生,filewatchevent產生後,由於我們將事件filewatchevent繫結到了onfilechange()方法上。因而呼叫本地即視窗類的onfilechange()方法,從而實現在listbox中新增資訊。

博文出處:@張逸,感謝!學習了!

c 之委託和事件

一 委託簡介 委託是一種指標,保持方法的引用 委託使得方法可以作為引數進行傳遞 如 public delegate void mydelegate class program static void main string args 委託其實是一種特殊的類 他定義了方法的簽名 使得與該簽名相同的方法...

c 之委託和事件

一 委託簡介 委託是一種指標,保持方法的引用 委託使得方法可以作為引數進行傳遞 如 public delegate void mydelegate class program static void main string args 委託其實是一種特殊的類 他定義了方法的簽名 使得與該簽名相同的方法...

C 基礎系列 C 中委託與事件 一

我們都知道,c 中有 介面 這個概念,所謂的 介面 就是定義一套標準,然後由實現類來具體實現其中的方法,所以說 介面,是一組類的抽象 同樣道理,我們可以將 委託 理解為 方法的抽象 也就是說定義乙個方法的模板,至於這個方法具體是怎麼樣的,就由方法自己去實現。我們知道介面的最大好處就是可以實現多型,同...