C#的委託是什麼?

舉個例子,某人有三子,讓他們各自帶同樣東西出門,並帶回一頭獵物。能夠理解爲一種父親對兒子的委託。css

在學C時,必定會接觸到各類各樣的指針。正是指針的隨意使用,致使瞭如今溢出攻擊的泛濫。html

那麼在C#裏面,針對這種現象進行了改進--委託。委託的做用相似於方法指針,它指向一個方法,而且提供用戶程序使用。可是,這個方法指針是有限制的,必須規定好所指向方法的返回值,參數個數及各個參數的類型。所以,能夠防範溢出攻擊。編程

簡而言之:所謂委託,是能夠調用目標方法而且肯定方法簽名的一種特殊的對象。安全

具體到C#語法,委託分爲委託聲明和委託實例兩種。spa

委託聲明,用來聲明委託所指向的方法的簽名。它以delegate關鍵字開頭,通常寫在類的前面。例如,當我想要指向的方法爲:指針

public string MergeString(string s1, string s2)code

咱們就能夠聲明一個有兩個string參數而且返回一個string的委託: htm

delegate string TestDelegate(string s1, string s2); 對象

委託聲明並無指向任何方法,所以,它不能夠直接被調用。可是,咱們能夠經過委託(聲明)來實例化對象,這樣的對象就被稱爲委託實例。 rem

委託實例的建立與用類實例化一個對象相似,但有一個約定,要把目標方法的方法名做爲參數傳入,例如:

public void Print(string s1, string s2) 

{ 

 TestDelegate testDelegate = new TestDelegate(MergeString); 

 string newString=testDelegate(s1, s2) 

 Console.WriteLine(newString);  

}

方法Print中:

第一行,咱們利用一個委託聲明獲得了一個委託實例。

第二行,調用這個委託。

第三行,輸出結果。

小結一下,委託的實質是安全的方法指針;委託分爲委託聲明和委託實例;使用委託時,先聲明,而後實例化,最後調用。

一個頗有趣的問題出現了:咱們爲何要用委託?

委託給咱們帶來的最大好處時:其能夠經過編程方法來動態的調用別的方法。這意味着什麼?這意味着,當咱們把委託做爲參數時,寫一個代碼模板,就可讓其以必定的方式執行不一樣的代碼。

相關文章
相關標籤/搜索