c#**的使用主要在:需要將乙個方法當做引數傳遞到另乙個方法時。
比如啟動乙個執行緒執行任務,而這個執行緒要執行的方法可以通過**傳遞過來。
**包括乙個方法或者多個方法的位址和c++的函式指標很相似,但它是型別安全的。
1.宣告**
delegate void intmethodinvoker(int x);
這個**可以引用返回值型別為空,有乙個引數的所有方法,很重要的一點需要知道delegate是型別安全的。
delegate double twolongsop(long first, long second);
有兩個引數返回值為double的**。
delegate string getastring();
沒有引數返回值為string的**。
public delegate string getastring();
還可以說明**的訪問許可權。
2.使用**
使用**必須先要例項化乙個**
pri v a te delegate string getastring();
static void main()
", firststringmethod()); //firststringmethod()成為x.tostring()代表(**)
// with firststringmethod initialized to x.tostring(),
// the above statement is equivalent to saying
// console.writeline("string is ", x.tostring());
}可以通過以下兩種方法來呼叫已經例項化的方法
firststringmethod();
firststringmethod.invoke();
當然在例項化乙個**的時候並傳遞方法也可以通過以下兩種形式
getastring firststringmethod = new getastring(x.tostring);
getastring firststringmethod = x.tostring;
請看下面**例項
class mathoperation
public static double square(double value)
}定義乙個方法,該方法有兩個靜態函式,分別用於計算值得倍數和值的平方。
class program
; //例項化乙個**陣列,第乙個陣列元素**multiplybytwo方法第二個陣列元素**square方法
for(int i =0 ; i < operations.length;i++)
]:", i);
processanddisplaynumber(operations[i], 2.0);
processanddisplaynumber(operations[i], 7.94);
processanddisplaynumber(operations[i], 1.414);
console.writeline();}}
static void processanddisplaynumber(doubleop action,double value) //**作為引數進行傳輸
, result of operation is ", value, result);}}
二、如果不想定義**型別而使用**可以使用下列**形式
actionand funcdelegates
action指向沒有返回型別的方法,可以傳遞16個引數,其形式如下:
action指向乙個引數的方法
action指向兩個引數的方法
action指向八個引數的方法
func最多也可以傳遞16個引數,並且具有返回值型別
func指向沒有引數,有乙個返回值型別的方法。
func指向乙個引數的方法
func指向乙個具有四個引數的方法。
1、應用舉例
在上面的例項中我們定義了乙個**來指向靜態方法如下形式
delegate double doubleop(double x);
如果不想自己定義**,可以使用如下形式來指向靜態函式的兩個方法
func operations =
; //使用func來指向有返回值型別的乙個引數。並不需要自己再自定**,而使用系統自帶的**方法。
把這個**作為引數傳遞給相應的方法,其格式如下
static void processanddisplaynumber(funcaction,double value) //第乙個引數是**例項,第二個引數是**所用到的引數值
, result of operation is ",
value, result);
}
讀書筆記 之五
筆者的話 接觸硬體較少,很多術語都是字面翻譯,讀者請見諒.我盡量帶上英文原詞,避免歧義.2.2 磁碟驅動器元件 磁碟驅動器使用快速移動的臂來在大唱片一樣的覆蓋著小磁粒的碟片上讀寫資料的.資料從磁碟片上通過r w頭傳輸到計算機中.多個碟片,讀寫頭和控制器被組合在一起,通常這被稱為是硬碟驅動器 hard...
讀書筆記之TCP UDP
網際網路,更一般的是tcp ip網路為應用程式提供兩個運輸層協議,即udp和tcp。當乙個軟體開發者為英特網建立乙個新的應用時,首先要做出的決定就是,選擇使用tcp協議還是udp協議。每個協議為呼叫他們的應用程式提供了不同的服務集合。tcp服務模型包括面向連線服務和可靠資料傳輸服務。當某個應用程式呼...
讀書筆記之 Effective STL
條款3 使容器裡物件的拷貝操作輕量而正確 stl中採用的都是拷貝物件的方式 如果所有這些使stl的拷貝機制聽起來很瘋狂,就請重新想想。是,stl進行了大量拷貝,但它通常設計為避免不必要的物件拷貝,實際上,它也被實現為避免不必要的物件拷貝。和c和c 內建容器的行為做個對比,下面的陣列 widget w...