C 委託機制(2) Action

2021-09-29 04:06:47 字數 1946 閱讀 5466

action 是.net類庫從3.0開始新增的內建委託,用於實現對無返回函式的呼叫。以下示例定義了乙個action,在使用已經有函式show賦值後,再進行呼叫。

public

override

void

test()

public

void

show

(string s)

既然action類是用於表示函式的,那麼函式的引數列表和返回型別就很重要,關於這兩點action類規定如下:

返回型別必需為void,即不返回任何值。這也是為什麼這類函式被稱之為action(即運作)的原因了。

引數列表型別不限制,長度最多為16。補充一句,這個資料是微軟在調查了windows底層**得出的來的,即16個足夠滿足所有需求(如果極端情況不夠用,那麼就是設計問題,因為部分引數一定可以合併為乙個類,然後再進行呼叫)。以下是1-16個引數的action定義。從定義來看,本質上也就是使用delegate關鍵字定義的普通委託。

public

delegate

void

action

<

t1>

(t1 t1)

;public

delegate

void

action

t2>

(t1 t1,

t2 t2);.

..public

delegate

void

action

<

int1,in

t2,int3,in

t4,int5,in

t6,int7,in

t8,int9,in

t10,

int11,in

t12,

int13,in

t14,

int15,in

t16>

(t1 arg1,

t2 arg2,

t3 arg3,

t4 arg4,

t5 arg5,

t6 arg6,

t7 arg7,

t8 arg8,

t9 arg9,

t10 arg10,

t11 arg11,

t12 arg12,

t13 arg13,

t14 arg14,

t15 arg15,

t16 arg16)

;

委託的初始化有以下三種方式:

如下所示。

public

override

void

test()

// 3.通過lambda

action<

string

> act3 = s =

> console.

writeline

(s);

}public

void

show

(string s)

在直接使用函式名稱賦值時,可以非常方便地直接將已經定義好的函式名稱賦值給action變數即可。對於一些基本不需要復用的操作,可以直接使用匿名函式來定義。

在完成了以上的定義以後,我們可以使用以下**進行函式呼叫。

// 呼叫**

act1

("hello");

act2

("hello"

);

我們可以看到,呼叫方式就是直接使用定義好的action物件以函式名的方式進行引數呼叫。這個過程,就象是僅僅換了乙個名稱一樣。本質上來說,這是兩個不同的引用,指向相同的物件,可以理解為c++中的指標(事實上也確實如此)。

本文介紹了action類,用於對無引數的函式進行委託呼叫。它最多支援16個引數,可以滿足所有的需求。

C 委託基礎 泛型委託Action

c 委託基礎系列原於2011年2月份發表在我的新浪部落格中,現在將其般至本部落格。為了方便開發,net基類庫針對在實際開發中最常用的情形提供了幾個預定義好的委託,這些預定義委託用得很廣,比如在編寫lambda表示式和開發平行計算程式時經常要用到他們 對於函式返回值為空的情形,可以使用action泛型...

C 委託機制

c 的委託機制,實際上相當於函式的指標。如下例項 1 定義乙個類 class person string name public void person this.name name private virtual void eat food food 在該類中定義了乙個eat方法。對該物件進行例項...

C 委託機制

委託在c 中應用非常廣泛。最近初學c 記錄 delegate 一般語法 首先宣告delegate public delegate void boilhandler int param 相比普通方法 public float scrollvalue 形式上只是多了乙個標誌 delegate而已。其實可...