1.了解delegate
delegate可以認為是一種函數的指針,一個delegate類型的實例代表可以代表一個方法,在實際使用中我們可以在不知道方法名稱的情況下調用到這個方法。前面說太多可能會使大家變得糊涂,或者摸不著頭腦,我舉個例子,來詳細說明此種類型的用法:
整個例程的代碼,是控制臺項目.
//代碼開始
using system;
namespace consoleapp1
{
public delegate string functionpointer(string strname);
class class1
{
[stathread]
static void main(string[] args)
{
//
// todo: 在此處添加代碼以啟動應用程序
system.console.writeline("hello world!");
functionpointer fpa = new functionpointer(afunction);
functionpointer fpb = new functionpointer(bfunction);
invokemethod(fpa);
invokemethod(fpb);
system.console.readline();
//
}
public static string afunction(string snamea)
{
return "afunction say i'm " + snamea;
}
public static string bfunction(string snameb)
{
return "bfunction say i'm " + snameb;
}
public static void invokemethod(functionpointer fp)
{
system.console.writeline(fp("storm"));
}
}
}
//代碼結束
步驟1:要使用delegate類型首先應該建立delegate樣板,所謂delegate樣板其實就是delegate能夠調用的方法的簽名,什么是方法的簽名?方法的簽名可以認為是方法的參數類型、數量、返回值類型這些特征。
定義的形勢如下: 訪問修飾符(public) delegate 返回值類型 名稱(參數列表);
說明:返回值類型應該是你定義的delegate類型所準備調用的方法的返回值類型,參數列表應該與你準備使用delegate來調用的方法的參數列表相同(指的是數量、類型、順序相同,名稱當然無所謂了)
一個實際的例子就是上面程序的
public delegate string functionpointer(string strname);
步驟2:定義delegate準備調用的方法,當然該方法要與你剛才聲明的delegate有相同的返回值和參數表;
例如上面程序的:
public static string afunction(string snamea)
{
return "afunction say i'm " + snamea;
}
public static string bfunction(string snameb)
{
return "bfunction say i'm " + snameb;
}
步驟3:定義delegate類型的處理函數,在這里可以定義如何調用你的delegate類型所指的方法,在實際使用中可以在這里來動態決定傳入的參數等信息。
如上面程序的
public static void invokemethod(functionpointer fp)
{
system.console.writeline(fp("storm97"));
}
步驟4:建立delegate實例,傳入欲調用的方法名,要使用delegate類型必須建立他的實例,一個實例代表了一個方法的引用(可以這樣說)
delegate實例定義的形式:
xxx(代表你定義的某個delegate類型的名稱) 實例名(假設是實例a) = new xxx([欲調用的方法名(假設是方法a)]);
意思是實例變量a指向方法a的程序代碼段;
如:
static void main(string[] args)
{
//
// todo: 在此處添加代碼以啟動應用程序
system.console.writeline("hello world!");
//建立第一個delegate的實例fpa,該實例代表方法afunction;
functionpointer fpa = new functionpointer(afunction);
//建立第一個delegate的實例fpa,該實例代表方法bfunction;
functionpointer fpb = new functionpointer(bfunction);
......
//
}
下面就可以運行整個程序了。
如:
static void main(string[] args)
{
//
......
//調用方法afunction
invokemethod(fpa);
//調用方法bfunction
invokemethod(fpb);
//
}
輸出結果: afunction say i'm storm97
bfunction say i'm storm97
當然,從這個例子看不出delegate有什么優勢,因為這個程序太簡單了,也許有人會說調用方法要這么麻煩嗎,我直接調用就算了,何必要繞個大圈兒去調用呢,其實在實際應用中這種方式會給我們帶來很大的靈活性,以后在實際使用過程中你們會慢慢體會到的。:)
最大的網站源碼資源下載站,
新聞熱點
疑難解答
圖片精選