在windows 程式設計中用到最多的就是控制項的時間了,微軟給我們很好的方式,把注意力放到事件執行方法的設計和編碼上,但是但我們真正弄懂了事件的真正出發執行原理的話,對我們的程式設計的提高真是非常榜的,例如在windows程式設計中 如果我單擊了乙個button按鈕觸發了button 的click事件 button1_click(){} , 但是有時候我們程式設計的時候,不但想要觸發button 的單擊事件,我還想要把其他的時間也要呼叫下來順序執行,要實現這種方式,除了在方法最後對其他方法的呼叫,還可以利用將其他需要順序執行的方法封裝到button的click 事件的委託物件中,這樣就能夠順序執行毀掉方法列表中的程式了,而這種方式的實現是以清楚事件觸發和委託的呼叫為前提的。
事件是類和物件向外界發出的訊息,事件的執行是通過事件委託的方式,呼叫我們所準備好的處理方法,而是先訊息的響應的。要響應某些事件並針對某些事件執行我們意定的方法,需要做到以下幾步:
1、宣告事件委託。
2、宣告事件。
3、新增事件的觸發方法。
4、新增事件的處理程式(響應事件的方法)。
5、將指定的事件處理程式邦定到要處理的事件上(訂閱事件)。
6、使用者資訊操作,並觸發事件(呼叫事件的觸發方法)。
7、通過事件委託的**,執行我們需要的事件處理程式。
下面我們舉乙個簡單的自定義事件處理程式的例子(控制台程式)
namespace 事件
}//定義delegate
public delegate void testeventhandler(object sender, testeventargs e);
//用event 關鍵字宣告事件物件
public event testeventhandler testevent;
//事件觸發方法
protected virtual void ontestevent(testeventargs e)
//引發事件
public void raiseevent(char keytoraiseevent)
}//監聽事件的類
public class testeventlistener
,所按得健為:", sender, e.keytoraiseevent);
}//訂閱事件
public void subscribe(testeventsource evensource)
//取消訂閱事件
public void unsubscribe(testeventsource evensource)
}//測試類
public class test}}
程式執行結
訂閱事件
輸入乙個字元,再按enter鍵
aaaa
傳送者:事件.testeventsource,所按得健為:a
取消訂閱事件
輸入乙個字元,再按enter健
testeventsource類。他就相當於windows控制項類一樣,是事件的源,裡面包含有事件的宣告,以及儲存呼叫引數的事件引數類,以及事件的觸發方法。
testeventlistener類。他提供了事件處理程式,並實現了事件處理程式和事件物件的邦定,當然時間處理程式可以放在別處, 跟邦定程式(訂閱事件)放在一起便於理解和呼叫
test 類,例項化自定義事件的事件源物件,並呼叫 testeventlistener類中的subscribe(es);方法進行事件物件和事件處理程式的邦定(訂閱事件),呼叫 testeventsource類中的raiseevent(char keytoraiseevent)引發物件,並有物件所指定的委託**處理事件。完成整個自定義事件。
其中 raiseevent(char keytoraiseevent) 就相當於main()一樣是自定義事件的執行入口, 從這個法開始---〉呼叫事件委託----〉查詢訂閱事件程式找到事件所封裝的方法集----〉由委託**事件處理程式並傳遞引數---〉執行事件處理程式。
引用自 :
C 委託和自定義事件
委託 相當於c 中的 函式指標 委託必須與所要 指向 的函式在 引數 和 返回型別 上保持一致 定義person類 public class person 定義委託 public delegate string dele speak string str class program 定義person...
C 中自定義事件和委託例項
在windows 程式設計中用到最多的就是控制項的事件了,微軟給我們很好的方式,把注意力放到事件執行方法的設計和編碼上,但是但我們真正弄懂了事件的真正出發執行原理的話,對我們的程式設計的提高真是非常榜的,例如在windows程式設計中 如果我單擊了乙個button按鈕觸發了button 的click...
C 委託 事件 自定義事件的理解
一 委託 委託類似於函式指標,但函式指標只能引用靜態方法,而委託既能引用靜態方法,也能引用例項方法。委託使用分三步 1 委託宣告。2 委託例項化。3 委託呼叫。例程一 using system namespace 委託 private int add int num1,int num2 例中,委託n...