using system;
using system.collections.generic;
using system.text;
namespace delegate
private static void chinesegreeting(string name)
//注意此方法,它接受乙個greetingdelegate型別的方法作為引數
private static void greetpeople(string name, greetingdelegate makegreeting)
static void main(string args) }}
輸出如下:
morning, jimmy zhang
早上好, 張子陽
我們現在對委託做乙個總結:
委託是乙個類,它定義了方法的型別,使得可以將方法當作另乙個方法的引數來進行傳遞,這種將方法動態地賦給引數的做法,可以避免在程式中大量使用if-else(switch)語句,同時使得程式具有更好的可擴充套件性。
*************************
1 委託greetingdelegate 和 型別 string 的地位一樣,都是定義了一種引數型別
static void main(string args)
2 委託不同於string的乙個特性:可以將多個方法賦給同乙個委託,或者叫將多個方法繫結到同乙個委託,當呼叫這個委託的時候,將依次呼叫其所繫結的方法
static void main(string args)
輸出為:
morning, jimmy zhang
早上好, jimmy zhang
3 實際上,我們可以也可以繞過greetpeople方法,通過委託來直接呼叫englishgreeting和chinesegreeting:
static void main(string args)
4 注意這裡,第一次用的「=」,是賦值的語法;第二次,用的是「+=」,是繫結的語法。如果第一次就使用「+=」,將出現「使用了未賦值的區域性變數」的編譯錯誤。
我們也可以使用下面的**來這樣簡化這一過程:
greetingdelegate delegate1 = new greetingdelegate(englishgreeting);
delegate1 += chinesegreeting; // 給此委託變數再繫結乙個方法
看到這裡,應該注意到,這段**第一條語句與例項化乙個類是何其的相似,你不禁想到:上面第一次繫結委託時不可以使用「+=」的編譯錯誤,或許可以用這樣的方法來避免:
greetingdelegate delegate1 = new greetingdelegate();
delegate1 += englishgreeting; // 這次用的是 「+=」,繫結語法。
delegate1 += chinesegreeting; // 給此委託變數再繫結乙個方法
5既然給委託可以繫結乙個方法,那麼也應該有辦法取消對方法的繫結,很容易想到,這個語法是「-=」:
static void main(string args)
輸出為:
morning, jimmy zhang
早上好, jimmy zhang
早上好, 張子陽
讓我們再次對委託作個總結:
使用委託可以將多個方法繫結到同乙個委託變數,當呼叫此變數時(這裡用「呼叫」這個詞,是因為此變數代表乙個方法),可以依次呼叫所有繫結的方法。
//*************************=
public delegate void greetingpeople(string name);
public class delegatedemo
public static void chineseg(string name)
public static void englistg(string name)
public static void gr(string name, greetingpeople gring)
static void gg(string agr) }
二、事件委託
public class greetingmanager}
很容易注意到:makegreet 事件的宣告與之前委託變數delegate1的宣告唯一的區別是多了乙個event關鍵字。看到這裡,在結合上面的講解,你應該明白到:事件其實沒什麼不好理解的,宣告乙個事件不過類似於宣告乙個進行了封裝的委託型別的變數而已。
委託的使用
委託字面上的理解就是讓別人做事,程式上的委託也差不多這個意思,不過委託的實現需要的步驟,體現的每詞實現委託的過程中 第一步 委託的宣告 新增乙個例項的委託 public delegate void clientpipelineobjectmodules request request 這個就是新增了...
委託的使用
using system using system.collections.generic using system.text namespace delegate private static void chinesegreeting string name 注意此方法,它接受乙個greeting...
C 委託的使用
為了理解委託,首先設計乙個簡單的業務場景 寫乙個簡單的氣泡排序的演算法 public intbubblesort int items return items 因為這個演算法是乙個經典演算法,於是決定把他封裝到乙個通用的類庫里,但是 麻煩來了,如果傳進去的變數是比對字串怎麼辦?好,按照以前的思路,再...