事件:如果型別定義了事件成員,那麼型別就可以通知其他物件發生了特定的事情。例如,button類提供了乙個名為click的事件。
應用程式中的乙個或者多個物件可能想接收關於這個事件的通知,以便在button被點選後採取操作。
下面我們利用乙個例子來加深我們對事件的理解:假定現在要設計乙個電子郵件應用程式,電子郵件到達時,使用者可能希望將該郵件**給傳真機或其他裝置。構建這個應用程式時,先設計乙個mailmanager的型別,他負責接收傳入的電子郵件,mailmanager型別公布乙個newmail的事件。其他型別,如fax和pager物件可登記對它們對這個事件的關注。
下面上**:
第一步:定義型別來容納所有需要傳送給事件通知接收者的附加資訊
複製**
**如下:
internal class newmaileventargs : eventargs
public string from}
public string to}
public string subject}
}注:eventargs只是乙個讓其他型別繼承的基型別。許多事件都沒有附加的資訊要傳遞,但在我們的場景中需要傳遞郵件資訊,就構造newmaileventargs。
第二步:定義事件成員
internal class mailmanager
注:newmail是這個事件的名稱。事件成員的型別是eventhandler,所以方法原型必須具有以下形式:
void methodname(object sender,newmaileventargs e);
第三步:定義負責引發事件的方法來通知事件的登記物件
internal class mailmanager
}第四步:定義方法將輸入轉化為期望事件
internal class mailmanager
}設計偵聽事件型別,下面我們使用fax型別來使用事件,上**
複製**
**如下:
internal sealed class fax
//新的電子郵件到達時,mailmanager將呼叫這個方法
private void faxmsg(object sender,newmaileventargs e)
//執行這個方法,fax物件將向newmail事件登出自己對它的關注
public void unregister(mailmanager mm)
}注:c#編譯器會將+=操作符翻譯成以下**來新增物件對事件的關注:
mm.add_newmail(new eventhandler(this.faxmsg));
這樣我們的例子就完成了,當有新的郵件收到時就會觸發對郵件類事件關注的所有方法,即例子中的fax中的faxmsg方法。例子需要對大家理解事件有所幫助。
C 委託和事件的使用示例
一 委託 使用委託時要先例項化,和類一樣,使用new關鍵字產生委託的新例項,然後將乙個或者多個與委託簽名匹配的方法與委託例項關聯。隨後呼叫委託時,就會呼叫所有與委託例項關聯的方法。與委託關聯可以是任何類或者結構中的方法,可以是靜態方法,只要是可以訪問的方法都可以。1.建立乙個委託型別使用關鍵字del...
C 委託和事件的使用示例
一 委託 使用委託時要先例項化,和類一樣,使用new關鍵字產生委託的新例項,然後將乙個或者多個與委託簽名匹配的方法與委託例項關聯。隨後呼叫委託時,就會呼叫所有與委託例項關聯的方法。與委託關聯可以是任何類或者結構中的方法,可以是靜態方法,只要是可以訪問的方法都可以。1.建立乙個委託型別使用關鍵字del...
簡單C 事件示例
熱水器開始對水加熱,當水加熱到95度以上的時候,熱水器的報警器開始報警,並且在螢幕上顯示當前的水溫。不難從上面的這一小段話看到,要想模擬該程式,需要乙個熱水器物件heater,報警器物件alarm,顯示器物件display。下面邊上 邊解釋吧。熱水器類,用來燒水的 class heater publ...