基本處理過程如下所示:
首先,應用程式建立乙個可以引發事件的物件;
接著,應用程式訂閱事件;
引發事件後,就通知訂閱器;
處理事件,需要提供乙個事件處理方法來訂閱事件,該方法的返回型別和引數應該匹配事件指定的委託。
namespace eventlearn
}public class connection
public void connect()
public void disconnect()
private static random random = new random();
//註冊了elapsed事件的事件處理程式,
private void checkformessage(object source,elapsedeventargs e)}}
//這個方法匹配於委託型別(而且是公共的,如果類不是生成該事件的類,則其事件處理程式就必須是公共的),所以可以用它來響應messagearrived 事件。
//訂閱事件的類是display,它包含乙個方法displaymessage(),
public class display
",message);}}
}
事件的含義
事件類似於異常,因為它們都由物件引發(丟擲),我們可以提供**來處理事件。但它們也有幾個重要的區別。最重要的區別是並沒有與try ... catch 類似的結構來處理事件,而必須訂閱(subscribe)它們。訂閱乙個事件的含義是提供**,在事件發生時執行這些**,它們稱為事件處理程式。
單個事件可供多個處理程式訂閱,在該事件發生時,這些處理程式都會被呼叫,其中包括引發該事件的物件所在的類中的事件處理程式,但事件處理程式也可能在其他類中。
事件處理程式本身都是簡單的方法。對事件處理方法的唯一限制是它必須匹配於事件所要求的返回型別和引數。這個限制是事件定義的一部分,由乙個委託指定。
.多用途的事件處理程式
前面 timer.elapsed 事件的委託包含了事件處理程式中常見的兩類引數,如下所示:
. object source——引發事件的物件的引用
. elapsedeventargs e——由事件傳送的引數
在這個事件(以及許多其他的事件)中使用object 型別引數的原因是,我們常常要為由不同物件引發的幾個相同事件使用同乙個事件處理程式,但仍要指定哪個物件生成了事件。
前面的所有事件處理程式都使用void 型別的返回值。可以為事件提供返回型別,但這會出問題。這是因為引發給定的事件,可能會呼叫好幾個事件處理程式。如果這些處理程式都返回乙個值只允許訪問由事件處理程式最後返回的那個值,也就是最後乙個訂閱該事件的處理程式返回的值。
C 委託和事件(3)
面試例題4 舉例說明匿名方法。考點 匿名方法的作用,匿名方法的使用方法。出現頻率 解答匿名方法用於簡化事件註冊方法的編寫過程,可以直接將方法體的 和委託物件相關聯而不需要單獨定義這個方法。本例程式仍然實現eventdel.cs的相同功能,只是將事件處理方法更改為匿名方法,並且在name類中將觸發事件...
C 學習 九 事件
事件的應用 單詞event,翻譯為 事件 通俗的解釋為 能夠發生的什麼事情 使物件或類具備通知能力的成員 用於物件或類間動作的協調與資訊傳遞 訊息推送 事件模型 event model 中的兩個 5 using system using system.collections.generic usin...
事件(3) 事件物件
在觸發dom上的某個事件的時候,會產生乙個事件物件event,這個物件包含著所有與事件有關的資訊,包括導致事件的元素 事件型別等,所有的瀏覽器都支援event物件,但支援方式不同。只有在事件處理程式執行期間,event物件才會存在,一旦執行完成就會別銷毀 1 dom中的事件物件 var btn do...