用乙個例子來說明事件的使用。
建立乙個簡單的類,名為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 中有 介面 這個概念,所謂的 介面 就是定義一套標準,然後由實現類來具體實現其中的方法,所以說 介面,是一組類的抽象 同樣道理,我們可以將 委託 理解為 方法的抽象 也就是說定義乙個方法的模板,至於這個方法具體是怎麼樣的,就由方法自己去實現。我們知道介面的最大好處就是可以實現多型,同...