事件的由來
我們繼續思考上面的程式:上面的三個方法都定義在programe類中,這樣做是為了理解的方便,實際應用中,通常都是 greetpeople 在乙個類中,chinesegreeting和 englishgreeting 在另外的類中。現在你已經對委託有了初步了解,是時候對上面的例子做個改進了。假設我們將greetingpeople()放在乙個叫greetingmanager的類中,那麼新程式應該是這個樣子的:
namespace delegate
}class program
private static void chinesegreeting(string name)
static void main(string args) }}
這個時候,如果要實現前面演示的輸出效果,main方法我想應該是這樣的:
static void main(string args)
我們執行這段**,嗯,沒有任何問題。程式一如預料地那樣輸出了:
morning, jimmy zhang
早上好, 張子陽
輸出:morning, jimmy zhang
早上好, jimmy zhang
到了這裡,我們不禁想到:物件導向設計,講究的是物件的封裝,既然可以宣告委託型別的變數(在上例中是delegate1),我們何不將這個變數封裝到 greetmanager類中?在這個類的客戶端中使用不是更方便麼?於是,我們改寫greetmanager類,像這樣:
現在,我們可以這樣使用這個委託變數:
儘管這樣達到了我們要的效果,但是似乎並不美氣,光是第乙個方法註冊用「=」,第二個用「+=」就讓人覺得彆扭。此時,輪到event出場了,c# 中可以使用事件來專門完成這項工作,我們改寫greetingmanager類,它變成了這個樣子:
很容易注意到:makegreet 事件的宣告與之前委託變數delegate1的宣告唯一的區別是多了乙個event關鍵字。看到這裡,你差不多明白到:事件其實沒什麼不好理解的,宣告乙個事件不過類似於宣告乙個委託型別的變數而已。
我們想當然地改寫main方法:
這次,你會得到編譯錯誤:事件「delegate.greetingmanager.makegreet」只能出現在 += 或 -= 的左邊(從型別「delegate.greetingmanager」中使用時除外)。
static void main(string args)
public class greetingmanager
}static void main(string args)
public class greetingmanager
}static void main(string args)
由委託說明事件的由來2
由於以上兩個不足,我們可以使用事件來解決問題。1 即在使用者控制項的 如下 public partial class eventusercontrol usercontrol int count 0 private void button1 click object sender,eventargs...
C 委託和事件(3)
面試例題4 舉例說明匿名方法。考點 匿名方法的作用,匿名方法的使用方法。出現頻率 解答匿名方法用於簡化事件註冊方法的編寫過程,可以直接將方法體的 和委託物件相關聯而不需要單獨定義這個方法。本例程式仍然實現eventdel.cs的相同功能,只是將事件處理方法更改為匿名方法,並且在name類中將觸發事件...
事件冒泡和事件委託
今天學到了事件冒泡和事件委託這兩個詞,現在談一下我的理解。如果有錯誤,還望各位大佬及時糾正,謝謝。事件冒泡 父元素和子元素有觸發事件時,如果子元素觸發,會引起父元素事件也觸發。有一點搞清楚,父元素通常就相當於是乙個大盒子,而子元素則是裡面的內容。解決辦法 有時候,不需要觸發父元素的時候,可以使用ev...