国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

C#中Delegate淺析

2024-07-21 02:19:00
字體:
來源:轉載
供稿:網友

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)

{ 根據命令生產產品,并返回生產工程中的信息;}

}





如何執行呢:???????老板怎么使用secretory這個類呢???

老板只需要把秘書叫(new)過來,直接向他下達命令,然后就可以喝茶去了~

class boss

{

public void static main()

{

(new secretory()).doit(“我們要生產氫彈,把以前的原子彈都扔到日本好了”);

}

}



5. 其他

正入你們所見的,上面的兩個類中的方法,一個是靜態,一個不是靜態的. 托管函數所指的函數可以靜態的也可以不是靜態的.

6. 歡迎大家補充和拍磚~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵丘县| 龙川县| 湟中县| 和林格尔县| 荆门市| 泗阳县| 万载县| 定日县| 库伦旗| 多伦县| 西城区| 邹平县| 龙州县| 盱眙县| 柳河县| 贞丰县| 河北省| 翁源县| 璧山县| 吴江市| 沙田区| 政和县| 色达县| 伊金霍洛旗| 朝阳区| 溧水县| 古丈县| 来宾市| 淮阳县| 湘阴县| 深水埗区| 沈丘县| 康定县| 专栏| 永登县| 岑溪市| 五原县| 象山县| 双辽市| 花莲市| 霍林郭勒市|