1. 什么是托管函數
托管函數是一個對類里面的某個函數的一個引用.它自己并沒有具體的函數定義,只是指向某個函數實現.
2. 與c++, delphi的橫向比較
在c++和delphi中與托管函數對應的類型是函數指針,形式如下:
c++
typedef (int getnum)(real rnum);
delphi
function getnum(rnum:real): integer; external;
這里定義函數指針,他們所能指向的函數定義的傳入參數必須是實型,傳出為整形
3. 托管函數有什么用
由于托管函數是對類里面某個函數的一個引用.所以我們不必知道這個函數的具體名字是什么,而只需要調用托管函數,讓托管函數去調用相應的函數就可以了. 一個例子: 一個公司,一個領導,一個領導秘書,三個員工分別管理市場,策劃和生產.這里秘書就相當與一個托管函數, 領導要下達什么命令(獲得市場信息,生產什么產品),只需要對秘書說給我一份市場報告或者我們不生產原子彈轉向生產氫彈.然后再由秘書根據領導的命令選擇的去找哪個員工,再把員工獲得的信息返回給領導. 這里面三個員工對于領導是透明的,領導并不知道自己下達的命令具體是由誰執行的.
4. 如何定義&&如何使用
接著上面的例子,我們聲明一個秘書托管函數原型
class secretory
{
//定義托管函數原型
private delegate string do(string command);
//創建托管函數實例
public do doit;
//給秘書下達命令執行
public void executecommand(string command)
{
switch(秘書根據命令判斷是要給誰執行的)
{
case 調研市場的人:
doit=new do(new marketman().getmarketinfo);
break;
case 生長產品的人:
doit=new do(new productman().produceproduct);
break;
default:
break;
}
}
doit(command);
}
///調研市場的那個人的類
class marketman
{
public string getmarketinfo(string command)
{ 根據命令調查信息, 返回獲得信息 ;}
}
///生產產品的人
class productman
{
public static string produceproduct(string command)
{ 根據命令生產產品,并返回生產工程中的信息;}
}
ok,那么如何執行呢?老板怎么使用secretory這個類呢?
go on
老板只需要把秘書叫(new)過來,直接向他下達命令,然后就可以喝茶去了~ ^_^
class boss
{
public void static main()
{
(new secretory()).doit(“我們要生產氫彈,把以前的原子彈都扔到日本好了”);
}
}
5. 其他
正入你們所見的,上面的兩個類中的方法,一個是靜態,一個不是靜態的. 托管函數所指的函數可以靜態的也可以不是靜態的.
新聞熱點
疑難解答