委託的前世今生

2022-02-11 06:37:39 字數 1192 閱讀 6960

學習委託那段時間是我對程式設計最頭疼的幾個時間段之一,.net中的委託自從出現以來,就開始了它征服程式設計師和被程式設計師征服的歷程。直到現在,我依然不敢說自己對委託的認識已經足夠清晰,也許它並不很難,可是我覺得它很繞。今天說說委託的前世今生,不知道對學習委託的人有沒有用。

委託前世:與指標的各種糾葛

如果說委託是憑空發明的,似乎有點說不過去,因為指標不同意,有些指標認為委託繼承了它的一些基因。

都知道c語言中有一種很強大的**就是指標,指標乙個比較大的用處就是允許我們手動操作記憶體,這一點也是與現今的託管**高階語言的乙個主要區別。變數的記憶體位址可以儲存在相應的指標變數中,同樣函式的首位址也可以儲存在某個函式指標變數裡的。這樣我們就可以通過這個函式指標變數來呼叫其所指向的函式了。

一般情況下很少會直接將函式指標作為函式引數傳遞,但如果想在乙個方法裡呼叫使用者傳遞的函式並通知使用者我們進行了某項操作,繼而讓使用者繼續他的使用或操作。具體**可以自己查閱相關的資料,我就不給出了,大學考過c語言以後沒怎麼寫過,我腦中的c已經生鏽了。

委託的今生:物件導向時代肩負重任

隨著物件導向時代的到來,新的開發方法和模式逐漸的取代了面向過程的開發。物件作為物件導向中開發的基本單位,是資料和操作的組合體,封裝了資料和操作。這樣的話,很顯然我們不能將函式直接作為引數傳遞了。作為一種新生代的語言,c#除了引入一些新的特性之外,同時也需要相容一些已經存在的技術。

我們都知道既然方法都依附於某個物件,那麼我們就可以定義乙個類,來記錄方法的相關資訊,這樣不僅保證了方法的唯一性,同時也提高了**的安全性。所以在c#中引入了委託,委託是一種定義方法簽名的型別。當例項化委託時,可以將其實例與任何具有相容簽名的方法相關聯。我們可以通過委託例項呼叫方法。委託用於將方法作為引數傳遞給其他方法。事件處理程式就是通過委託呼叫的方法。您可以建立乙個自定義方法,當發生特定事件時某個類就可以呼叫我們的方法。

簡單講解一下對委任的理解

我看過至少十個委託的講解版本,每個都有自己的使用習慣,當時覺得委託變化太多端(這可能也是最開始把我弄懵的原因之一吧),現在我簡單用**為初學者解釋一下委託吧:

public

abstract

class

delegate : icloneable, iserializable

一句話說明我對委託的使用感受

委託的前世今生

1 namespace heater219 20 21 22 23 24public class alarm度了 param 28 29 3031 public class display 度 param 36 37 3839 class program 4052 53 54.net framewo...

事件的前世今生,委託和事件關係

假設沒有事件,我們能不能通過委託實現事件的功能?事實上是可以的。下面我們一步一步剖析!先舉個例子 有這麼乙個場景,有乙個氣球 相當於事件 訊息的傳送者 氣球 相當於觸發事件 小孩子聽到氣球 會嚇哭 小孩子相當於乙個事件的訂閱者 我們不適用事件,使用委託來完成這個程式。第一步 定義乙個全域性的委託型別...

事件的前世今生,委託和事件關係

假設沒有事件,我們能不能通過委託實現事件的功能?事實上是可以的。下面我們一步一步剖析!先舉個例子 有這麼乙個場景,有乙個氣球 相當於事件 訊息的傳送者 氣球 相當於觸發事件 小孩子聽到氣球 會嚇哭 小孩子相當於乙個事件的訂閱者 我們不適用事件,使用委託來完成這個程式。第一步 定義乙個全域性的委託型別...