1. 什么是托管函數(shù)
托管函數(shù)是一個(gè)對類里面的某個(gè)函數(shù)的一個(gè)引用.它自己并沒有具體的函數(shù)定義,只是指向某個(gè)函數(shù)實(shí)現(xiàn).
2. 與C++, Delphi的橫向比較
在C++和Delphi中與托管函數(shù)對應(yīng)的類型是函數(shù)指針,形式如下:
C++
typedef (int GetNum)(real rNum);
Delphi
function GetNum(rNum:real): integer; external;
這里定義函數(shù)指針,他們所能指向的函數(shù)定義的傳入?yún)?shù)必須是實(shí)型,傳出為整形
3. 托管函數(shù)有什么用
由于托管函數(shù)是對類里面某個(gè)函數(shù)的一個(gè)引用.所以我們不必知道這個(gè)函數(shù)的具體名字是什么,而只需要調(diào)用托管函數(shù),讓托管函數(shù)去調(diào)用相應(yīng)的函數(shù)就可以了. 一個(gè)例子: 一個(gè)公司,一個(gè)領(lǐng)導(dǎo),一個(gè)領(lǐng)導(dǎo)秘書,三個(gè)員工分別管理市場,策劃和生產(chǎn).這里秘書就相當(dāng)與一個(gè)托管函數(shù), 領(lǐng)導(dǎo)要下達(dá)什么命令(獲得市場信息,生產(chǎn)什么產(chǎn)品),只需要對秘書說給我一份市場報(bào)告或者我們不生產(chǎn)原子彈轉(zhuǎn)向生產(chǎn)氫彈.然后再由秘書根據(jù)領(lǐng)導(dǎo)的命令選擇的去找哪個(gè)員工,再把員工獲得的信息返回給領(lǐng)導(dǎo). 這里面三個(gè)員工對于領(lǐng)導(dǎo)是透明的,領(lǐng)導(dǎo)并不知道自己下達(dá)的命令具體是由誰執(zhí)行的.
4. 如何定義&&如何使用
接著上面的例子,我們聲明一個(gè)秘書托管函數(shù)原型
class Secretory
{
//定義托管函數(shù)原型
PRivate delegate string Do(string command);
//創(chuàng)建托管函數(shù)實(shí)例
public Do Doit;
//給秘書下達(dá)命令執(zhí)行
public void ExecuteCommand(string command)
{
switch(秘書根據(jù)命令判斷是要給誰執(zhí)行的)
{
case 調(diào)研市場的人:
Doit=new Do(new MarketMan().GetMarketInfo);
Break;
Case 生長產(chǎn)品的人:
Doit=new Do(new ProductMan().ProduceProduct);
Break;
Default:
Break;
}
}
Doit(command);
}
///調(diào)研市場的那個(gè)人的類
class MarketMan
{
public string GetMarketInfo(string command)
{ 根據(jù)命令調(diào)查信息, 返回獲得信息 ;}
}
///生產(chǎn)產(chǎn)品的人
class ProductMan
{
public static string ProduceProduct(string command)
{ 根據(jù)命令生產(chǎn)產(chǎn)品,并返回生產(chǎn)工程中的信息;}
}
ok,那么如何執(zhí)行呢?老板怎么使用Secretory這個(gè)類呢?
go on
老板只需要把秘書叫(new)過來,直接向他下達(dá)命令,然后就可以喝茶去了~ ^_^
class Boss
{
public void static main()
{
(new Secretory()).Doit(“我們要生產(chǎn)氫彈,把以前的原子彈都扔到日本好了”);
}
}
5. 其他
正入你們所見的,上面的兩個(gè)類中的方法,一個(gè)是靜態(tài),一個(gè)不是靜態(tài)的. 托管函數(shù)所指的函數(shù)可以靜態(tài)的也可以不是靜態(tài)的.
新聞熱點(diǎn)
疑難解答
圖片精選