委託和事件使用示例

2021-05-24 13:37:56 字數 1850 閱讀 8762

.net

的事件模型建立在委託機制之上,透徹的了解了委託才能明白的分析事件。可以說,事件是對委託的封裝,從委託的示例中可知,在客戶端可以隨意對委託進行操作,一定程度上破壞了面向的物件的封裝機制,因此事件實現了對委託的封裝。

下面,通過將委託的示例進行改造,來完成乙個事件的定義過程:

public class calculator

} //

宣告事件委託

public delegate void calculateeventhandler(object sender,calculateeventargs e); //

定義事件成員,提供外部繫結

public event calculateeventhandler mycalculate; //

提供受保護的虛方法,可以由子類覆寫來拒絕監視

protected virtual void oncalculate(calculateeventargs e)

} //

進行計算,呼叫該方法表示有新的計算發生

public void calculate(int32 x, int32 y)

} 示例中,對計算器模擬程式做了簡要的修改,從二者的對比中可以體會事件的完整定義過程,

主要包括:

l 定義乙個內部事件引數型別,用於存放事件引發時向事件處理程式傳遞的狀態資訊,

eventargs

是事件資料類的基類。

l 宣告事件委託,主要包括兩個引數:乙個表示事件傳送者物件,乙個表示事件引數類物件。

l 定義事件成員。

l 定義負責通知事件引發的方法,它被實現為

protected virtual

方法,目的是可以在派生類中覆寫

該方法來拒絕監視事件。

l 定義乙個觸發事件的方法,例如

calculate

被呼叫時,表示有新的計算發生。

乙個事件的完整程式就這樣定義好了。然後,還需要定義乙個事件觸發程式,用來監聽事件:

//定義事件觸發者

public class calculatormanager

public void substract(object sender, calculator.calculateeventargs e)

} 最後,實現乙個事件的處理程式:

public class test_calculator

} 如果對設計模式有所了解,上述實現過程實質是

observer

模式在委託中的應用,在

.net

中對observer

模式的應用嚴格的遵守了相關的規範。在

windows form

程式開發中,對乙個

button

的click

就對應了事件的響應,例如:

this.button1.click += new system.eventhandler(this.button1_click);

用於將button1_click

方法繫結到

button1

的click

事件上,當有按鈕被按下時,將會觸發執行

button1_click

方法:private void button1_click(object sender, eventargs e)

注: calculator.mycalculate += cm.add;  //只是事件繫結,不觸發(執行)事件

protected virtual void oncalculate(calculateeventargs e) //事件的觸發方法,在各處呼叫此方法時代表觸發事件(執行已繫結的所有事件委託)

}

事件和委託示例

1 timer的elapsed事件 using system using system.collections.generic using system.linq using system.text using system.timers namespace timer的elapsed事件 e.si...

C 委託和事件的使用示例

一 委託 使用委託時要先例項化,和類一樣,使用new關鍵字產生委託的新例項,然後將乙個或者多個與委託簽名匹配的方法與委託例項關聯。隨後呼叫委託時,就會呼叫所有與委託例項關聯的方法。與委託關聯可以是任何類或者結構中的方法,可以是靜態方法,只要是可以訪問的方法都可以。1.建立乙個委託型別使用關鍵字del...

C 委託和事件的使用示例

一 委託 使用委託時要先例項化,和類一樣,使用new關鍵字產生委託的新例項,然後將乙個或者多個與委託簽名匹配的方法與委託例項關聯。隨後呼叫委託時,就會呼叫所有與委託例項關聯的方法。與委託關聯可以是任何類或者結構中的方法,可以是靜態方法,只要是可以訪問的方法都可以。1.建立乙個委託型別使用關鍵字del...