《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...