c#事件與委託十分相似,其實事件包含了乙個私有委託,所以事件就像是專門用於某種特殊用途的簡單委託。
正如上圖所示,發布者類incrementer裡面的事件countedadozen就像乙個裝方法的容器,這個容器對方法的新增與刪除是裡面的私有委託來實現的(這裡待會兒可以通過**理解),發布者類incrementer還有一塊觸發事件的**,這段觸發事件**的方法是那個方法容器的引線,只要執行這方法,引線點燃(觸發事件的**開始執行),引爆了容器(事件countedadozen開始執行委託裡面裝載的方法,比如圖中的incrementdozenscount( )和dosomething( )),這樣就走完了從觸發**到執行所有訂閱者**的流程。
以下是實現**:
delegate
void
handler()
;class
incrementer
//發布者}}
}class
dozens
void
incrementdozenscount()
//事件成員被觸發時要呼叫的方法
}class
someotherclass
public
void
dosomething()
//事件成員被觸發時要呼叫的方法
}class
program
}
執行結果:
事實上委託與事件的使用的本質差距在event這關鍵字(可見上圖**第三句),在這段**裡面有沒有event關鍵字執行結果都一樣,所以這裡看不出差別,但是如果把主函式裡面注釋掉的**incrementer.countedadozen()用出來會報錯,但是如果把關鍵字event取消掉就不報錯了,這是因為如果不用event這就跟普通委託一樣了,是可以直接呼叫委託,而加了event關鍵字才稱為事件,事件是不能直接呼叫委託的,必須在發布者內部呼叫,你會說那麼怎麼用呢?只能通過發布者內部方法docount( )去間接呼叫,不能隨意呼叫也體現了事件更加安全的優點,這正是事件與委託的使用區別。
C 事件的理解
說實話,事件弄得還是很暈,有待於以後的強化吧,下面是我對事件的一點理解 首先,參見大牛的帖子 網上大牛事件講解 下面我來說一說事件的大致流程 事件委託 事件概述 事件就是當物件或類狀態發生改變時,物件或類發出的資訊或通知。發出資訊的物件或類稱為 事件源 對事件進行處理的方法稱為 接收者 通常事件源在...
理解C 事件
如果做過gui程式開發,可能對上面的描述會比較熟悉。在gui程式中,單擊乙個button會觸發乙個click事件,然後會執行一系列的操作,這一系列的操作就被存放在乙個委託例項中。接下來我們就看看事件。使用委託中的問題 回到前面文章中蘋果和富士康的例子,蘋果將iphone的組裝 包裝和運輸的工作全部委...
理解C 事件
前面文章中介紹了委託相關的概念,委託例項儲存這乙個或一組操作,程式中將在某個特定的時刻通過委託例項使用這些操作。如果做過gui程式開發,可能對上面的描述會比較熟悉。在gui程式中,單擊乙個button會觸發乙個click事件,然後會執行一系列的操作,這一系列的操作就被存放在乙個委託例項中。接下來我們...