程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#委托和事件詳解(3)

C#委托和事件詳解(3)

編輯:關於C語言

輸出如下:

Morning, Jimmy Zhang

早上好, 張子陽

我們現在對委托做一個總結:

委托是一個類,它定義了方法的類型,使得可以將方法當作另一個方法的參數來進行傳遞,這種將方法動態地賦給參數的做法,可以避免在程序中大量使用If-Else(Switch)語句,同時使得程序具有更好的可擴展性。

將方法綁定到委托

看到這裡,是不是有那麼點如夢初醒的感覺?於是,你是不是在想:在上面的例子中,我不一定要直接在GreetPeople()方法中給 name參數賦值,我可以像這樣使用變量:

以下是引用片段:

static void Main(string[] args) {
string name1, name2;
name1 = "Jimmy Zhang";
name2 = "張子陽";
GreetPeople(name1, EnglishGreeting);
GreetPeople(name2, ChineseGreeting);
Console.ReadKey();
}

而既然委托GreetingDelegate 和 類型 string 的地位一樣,都是定義了一種參數類型,那麼,我是不是也可以這麼使用委托?

以下是引用片段:

static void Main(string[] args) {
GreetingDelegate delegate1, delegate2;
delegate1 = EnglishGreeting;
delegate2 = ChineseGreeting;
GreetPeople("Jimmy Zhang", delegate1);
GreetPeople("張子陽", delegate2);
Console.ReadKey();
}

如你所料,這樣是沒有問題的,程序一如預料的那樣輸出。這裡,我想說的是委托不同於string的一個特性:可以將多個方法賦給同一個委托,或者叫將多個方法綁定到同一個委托,當調用這個委托的時候,將依次調用其所綁定的方法。在這個例子中,語法如下:

以下是引用片段:

static void Main(string[] args) {
GreetingDelegate delegate1;
delegate1 = EnglishGreeting; // 先給委托類型的變量賦值
delegate1 += ChineseGreeting; // 給此委托變量再綁定一個方法
// 將先後調用 EnglishGreeting 與 ChineseGreeting 方法
GreetPeople("Jimmy Zhang", delegate1);
Console.ReadKey();
}

輸出為:

Morning, Jimmy Zhang

早上好, Jimmy Zhang

實際上,我們可以也可以繞過GreetPeople方法,通過委托來直接調用EnglishGreeting和ChineseGreeting:

以下是引用片段:

static void Main(string[] args) {
GreetingDelegate delegate1;
delegate1 = EnglishGreeting; // 先給委托類型的變量賦值
delegate1 += ChineseGreeting; // 給此委托變量再綁定一個方法
// 將先後調用 EnglishGreeting 與 ChineseGreeting 方法
delegate1 ("Jimmy Zhang");
Console.ReadKey();
}

NOTE:這在本例中是沒有問題的,但回頭看下上面GreetPeople()的定義,在它之中可以做一些對於EnglshihGreeting和ChineseGreeting來說都需要進行的工作,為了簡便我做了省略。

注意這裡,第一次用的“=”,是賦值的語法;第二次,用的是“+=”,是綁定的語法。如果第一次就使用“+=”,將出現“使用了未賦值的局部變量”的編譯錯誤。

我們也可以使用下面的代碼來這樣簡化這一過程:

以下是引用片段:

GreetingDelegate delegate1 = new GreetingDelegate(EnglishGreeting);
delegate1 += ChineseGreeting; // 給此委托變量再綁定一個方法

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved