以下僅個人理解,兼聽則明偏聽則暗!
一·先直接回答下個人理解,事件不是委托,我們可以理解成他是委托的一個實例。它使用委托的語言支持構建的。
二·委托
我們可以把他理解成這樣的一個對象,他包含相同簽名和返回值類型的有序方法列表,也可以這樣理解,他是可以把方法當做參數傳遞的一個類型(這些方法我們成為委托的方法列表)。
從本質上來講,他和int,string,類,結構等一樣,是一種類型,並且他是引用類型。就像類一樣,他也是需要聲明並且new出一個對象的。
那委托他是怎么工作的呢,簡單來講,我們調用委托的時候,委托去調用他包含的方法列表,這樣我們會感覺到我們是“直接”調用了方法,其實不然。
三·事件
那什么是事件,為什么他會和委托混淆在了一起呢?很多人以為“事件是一種特殊的委托”,甚至許多面試官都會這樣認為,因為它們非常相似的。誠然,事件是基於委托的,但個人並不認為因此事件就是委托了,
微軟官方也很間接的告訴了我們,事件他和委托知識類似,為什么會類似呢?因為事件是包含了委托的。下面我們詳細講講。
1.定義
1.同樣是定義,我們可以看到委托它可以定義在類的外面,而事件只能定義在類的里面,並且微軟很明確的提示你“ 命名空間不能直接包含字段或方法之類的成員 ”,其實這也說明了我將要說的,委托是一種類型,事件是一種成員。
2.聲明,我們可以在上面的圖中看到,事件的聲明用到的關鍵字“event”,但他在這個關鍵字后緊跟着的就是“EventHandler”,這個EventHandler是.NET BCL使用的,並被指定為事件使用標准的預定義委托類型。
從這很明確的看出,EventHandler是一個委托(delegate)。
含有一個方法的委托稱為單播委托,含有一個以上的方法的委托稱為多播委托,而事件就是建立在多播委托之上的,他們的構建非常相似,但他們並不是一回事。