C 委託 C函式指標

2021-04-27 14:34:09 字數 2982 閱讀 8235

《c#高階程式設計》裡說「.net已委託的形式實現了函式指標的概念」,這裡簡單比較一下兩者的區別:

1 首先看看c下的「函式指標」如何宣告和定義乙個函式變數:

typedef int (*func)(int x, int y);         //宣告

func     func;                                          //定義乙個「函式變數」

當已經有這樣乙個實現的函式時:

int somefn(int m, int n)

//函式實現

就可以將這個somefn 函式名賦值給 func變數:

func = somefn;

使用它:

func(100, 200)

2 再來看看c#裡委託如何實現上面所說,仍然使用上述的somefn函式實現:

宣告乙個委託「類」(在c#中沒有全域性函式概念,只有類):

private delegate void func (int x, int y );           // private是public沒關係

也的確,當你寫完了上句後,在vs2005中,發現func是和其他的「類」是並列的。

再來宣告乙個變數,並new乙個:

func func = new func (somefn)

注意new後面函式名後跟的引數不是somefn的兩個引數,而是somefn本身函式名,不過,這時的somefn實現若放在同乙個類中,需新增乙個static 關鍵字。

使用它,同上面的c語言一樣:

func(100, 200)

文章出處:diy部落(http://www.diybl.com/course/4_webprogram/asp.net/netjs/20090316/161868.html)

c#委託的例子:

以前對dot net

委託的理解

,沒有乙個很好的理解

,總是不清不混的

,今天在

《高階程式設計

(第六版

)>>,

總算有了新的看法

,不像我以往想象的那麼抽象或難以理解

,如果你想知道委託到底是怎麼回事的話

,就慢慢看下去

,真諦再現

,哈哈哈

...1.簡單的委託示例

在這個示例中,定義乙個類

mathsoperations

,它有兩個靜態方法,對

double

型別的值執行兩個操作,然後使用該委託呼叫這些方法。這個數學類如下所示:

class mathsoperations

public static double square(double value)

}下面呼叫這些方法:

using system;

namespace wrox.procsharp.delegates

;for (int i=0 ; i, 2.0);

processanddisplaynumber(operations, 7.94);

processanddisplaynumber(operations, 1.414);

console.writeline();}}

static void processanddisplaynumber(doubleop action, double value)

, result of operation is ", value, result);}}

}在這段**中,例項化了乙個委託陣列

doubleop (

記住,一旦定義了委託類,就可以例項化它的例項,就像處理一般的類那樣

—— 所以把一些委託的例項放在陣列中是可以的

)。該陣列的每個元素都初始化為由

mathsoperations

類執行的不同操作。然後迴圈這個陣列,把每個操作應用到

3個不同的值上。這說明了使用委託的一種方式

—— 把方法組合到乙個陣列中,這樣就可以在迴圈中呼叫不同的方法了。

這段**的關鍵一行是把委託傳遞給

processanddisplaynumber()

方法,例如:

processanddisplaynumber(operations, 2.0);

其中傳遞了委託名,但不帶任何引數,假定

operations

是乙個委託,其語法是:

●       operations表示「

這個委託

」。換言之,就是委託代表的方法。

●       operations(2.0)表示「

呼叫這個方法,引數放在括號中」。

processanddisplaynumber()

方法定義為把乙個委託作為其第乙個引數:

static void processanddisplaynumber(doubleop action, double value)

在這個方法中,呼叫:

double result = action(value);

這實際上是呼叫

action

委託例項封裝的方法,其返回結果儲存在

result

中。執行這個示例,得到如下所示的結果:

******delegate

using operations[0]:

value is 2, result of operation is 4

value is 7.94, result of operation is 15.88

value is 1.414, result of operation is 2.828

using operations[1]:

value is 2, result of operation is 4

value is 7.94, result of operation is 63.0436

value is 1.414, result of operation is 1.999396

C 函式指標與C 委託之間有何聯絡

c 中有一種應用方法叫做委託。其應用方式及實現功能和我們以前為大家介紹的c 函式指標有不少相同之處。在這篇文章中,我們將會針對這兩種方法做乙個簡單的介紹,方便大家區分理解。委託和函式指標都描述了方法 函式的簽名,並通過統一的介面呼叫不同的實現。但二者又有明顯的區別,簡單說來,委託物件是真正的物件,而...

C 傳委託給C的函式指標呼叫問題

c 如下 include stdio.h declspec dllexport int call int qq int num char str 多次驗證發現在c 中傳委託給c中的函式指標,如果委託不帶引數則都能成功執行,但是委託一帶引數不管是int引數還是string引數或者其他引數,都會報 嘗試...

C 函式委託型別

rel file list href file c 5cdocume 7e1 5cadmini 7e1 5clocals 7e1 5ctemp 5cmsohtml1 5c04 5cclip filelist.xml c 函式委託型別 rel file list href file c 5cdocum...