委託和事件 要注意的事項

2022-02-20 14:34:11 字數 1957 閱讀 4572

1、委託的宣告:

delegate handlername ([parameters])

例如:public delegate void printhandler(string str);

委託宣告定義了一種型別,它用一組特定的引數以及返回型別來封裝方法。對於靜態方法,委託物件封裝要呼叫的方法。對於例項方法,委託物件同時封裝乙個例項和該例項上的乙個方法。如果您有乙個委託物件和一組適當的引數,則可以用這些引數呼叫該委託。

在c#中使用委託方法:

·          建立委託所使用的方法必須和委託宣告相一致(引數列表、返回值都一致)

·          利用 +=、-=來進行委託的鏈結、取消鏈結或直接使用delegate.combine和delegate.remove方法來實現

·          可以使用multicastdelegate的例項方法getinvocationlist()來獲取委託鏈中所有的委託

·          不能撰寫包含 out 引數的委託

二、事件的簡介

c# 中的「事件」是當物件發生某些事情時,類向該類的客戶提供通知的一種方法。

1、事件的宣告:

宣告的格式為:event eventname

因為使用委託來宣告事件,所以在類裡宣告事件時,首先必須先宣告該事件的委託型別(如果尚未宣告的話)。在上面我們已經提到過了委託型別的宣告,但是在.net framework下為事件使用的委託型別進行宣告時有更嚴格的規定:

(1)、 事件的委託型別應採用兩個引數;

(3)、「e」引數的型別應為eventargs 類或派生自 eventargs 類。

如下的定義:

public delegate void printhandler(object sender,system.eventargs e);

然後我們才能宣告該委託型別的事件

例如:public event printhandler print;

當事件發生時,將呼叫其客戶提供給它的委託。

2、呼叫事件:

類宣告了事件以後,可以就像處理所指示的委託型別的字段那樣處理該事件。如果沒有任何客戶將委託與該事件繫結,則該字段將為空;否則該欄位引用應在呼叫該事件時呼叫的委託。因此,呼叫事件時通常先檢查是否為空,然後再呼叫事件。(呼叫事件,即觸發事件,只能從宣告該事件的類內進行)

if(print != null)

print (this,e);

3、事件繫結:

從類的外面來看,事件就象類的乙個公共成員,通過 類名.事件名 的形式來訪問,但是只能對它做繫結和解除繫結的操作,而不能有其他操作。

類名. print += new printhandler(繫結的方法名) // 將某個方法繫結到print事件上

類名. print -= new printhandler(繫結的方法名) // 將某個已繫結到print事件上的方法從print事件上解除

三、委託和事件的使用

委託和事件在使用者介面程式裡用的比較的多,比如象在winform或webform的使用者ui上的button和它的click事件:

// 將button1_click()方法繫結到按鈕控制項button1的click事件上

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

private void button1_click(object sender, system.eventargs e)    // button1_click()方法

然而除了使用者介面程式外,在很多其他地方也用到了事件驅動模式,比如觀察者模式(observer)或發布/訂閱(publish/subscribe)裡:在乙個類裡發布(publish)某個可以被觸發的事件,而其他的類就可以來訂閱(subscribe)該事件。一旦這個發布者類觸發了該事件,那麼執行時環境會立刻告知所有訂閱了該事件的訂閱者類:這個事件發生了!從而各個訂閱者類可以作出它們自己的反應(呼叫相應方法)。

程式要注意的事項

1 標點符號要注意 有大括號就不要分號了 如 這個鳥樣是不可以的 2 字母是不能漏寫,多寫,要分大小寫。3 if 結構的大括號裡面了出現的字元一定要在前面出現,而不能在if 從新出現新的品種 我不喜歡 4 if條件的設定它會按照條件來進行,如果有多重條件 的話,只有一項不符合,它就會跳到下乙個。遇到...

centos安裝要注意的幾個事項

輸入法的安裝 yum install chinese support y flash的安裝 chrome安裝 copy來的較為實用 谷歌的瀏覽器已經不支援redhat os 6.4及以上平台,如果手動編譯安裝,不僅要尋找安裝很多的依賴庫,而且很難找很麻煩,於是網上一頓狂搜,搜了幾天,終於覓得一簡單又...

15 4 迭代器要注意的事項

迭代器的add 加入資料是新增到當前指標指向的位置,則當前的資料往下一位移。集合的add 的加在集合的後面。remove 和add 都會改變個數,set 可以,它不會改變個數 迭代器在遍歷元素的時候要注意,在迭代器迭代元素的過程中 迭代器一旦建立到使用結束的時間,就是迭代器帶集合物件使用的後面一直不...