public delegate void DoGreeting(string name);
即宣告一個新委派,它帶有一個string型別參數的方法。接個我們宣告一個叫 GreetHello的方法,如下:
public void GreetHello(string name, DoGreeting MakeGreeting)
{
MakeGreeting(name);
}
我們發現,委派DoGreeting出現的位置與string相同。string是一個類別,所以DoGreeting應該也是一個類別或叫型別。我們可以這麼解釋委派,委派是同樣也是一個類別,它是針對方法所定義該方法的型別可以取代如if-else或是swich等語法,避免大量使用判斷語法造成程式大而無當的現象產生,這種動態地將方法型別設定與參數的做法,可以使程式具有更好的擴展性。範例如下:
using System;
namespace test_delegate
{
//定義委派,它定義了可以代表的方法的類型
// EnglishGreeting or ChineseGreeting
public delegate void DoGreeting(string name); //宣告委派
public class Program
{
private static void EnglishGreeting(string name)
{
Console.WriteLine("Hello, " + name);
}
private static void ChineseGreeting(string name)
{
Console.WriteLine("你好, " + name);
}
//它接收一個DoGreeting型別的方法做為參數
//World 名稱
//委派(EnglishGreeting or ChineseGreeting)
private static void GreetHello(string name,DoGreeting MakeGreeting) //帶入委派(在方法 之前)
{
MakeGreeting(name); //此方法須傳入name參數,做為判斷是那一個型別是 EnglishGreeting或是ChineseGreeting型別
}
public static void Main()
{
GreetHello("Jim",EnglishGreeting); //執行GreetHello方法,是EnglishGreeting型別
GreetHello("張三",ChineseGreeting); //執行GreetHello方法,是ChineseGreeting型別
}
}
}
沒有留言:
張貼留言