C 委託基礎

2022-01-24 03:30:54 字數 2421 閱讀 1203

委託是乙個類,它定義了方法的型別,使得可以將方法當作另乙個方法的引數來進行傳遞。委託型別有:delegate、action、func、predicate。事件是一種特殊的委託。

至少0個引數,至多32個引數,可以無返回值,也可以指定返回值型別。例如,表示有兩個引數,並返回int型。

///

///兩數相乘的委託

///public

delegate resultt multiplydelegate(t1 x, t2 y);

class

program

private

static

int multiply(int x,int

y)

}

action至少0個引數,至多16個引數,無返回值。

static

void main(string

args)

, "lambda表示式委託");

}private

static

void invokeaction(actionaction,t t)

private

static

void showstring(string

s)private

static

void showdouble(double

d)

func至少0個引數,至多16個引數,根據返回值泛型返回。必須有返回值,不可是void。

class

program

private

static

int multiply(int x,int

y)

}

可以使用 action委託以引數形式傳遞方法,而不用顯式宣告自定義的委託。 封裝的方法必須與此委託定義的方法簽名相對應。 也就是說,封裝的方法必須具有四個均通過值傳遞給它的引數,並且不能返回值。(在 c# 中,該方法必須返回 void)通常,這種方法用於執行某個操作。

predicate表示傳入引數為int 返回bool的委託。predicate有且只有乙個引數,返回值固定為bool。該委託表示定義一組條件並確定指定物件是否符合這些條件的方法。此委託由 array 和 list 類的幾種方法使用,用於在集合中搜尋元素。

static

void main(string

args)

; tuple

frist =array.find(tuples, product);

console.writeline(frist.tostring());

}private

static

bool product(tupletuple)

使用帶有 array.find 方法的 predicate 委託搜尋 tuple

的陣列。如果 item1大於item2,此委託表示的方法 product將返回 true。find 方法為陣列的每個元素呼叫此委託,在符合測試條件的第乙個點處停止。

前面使用到的委託都只包含了乙個方法的呼叫。呼叫委託的次數與呼叫方法的次數相同。如果要呼叫多個方法,需要多次顯示呼叫該方法---多播委託。多播委託的簽名必須返回void,否則只能獲取到最後乙個方法的結果。多播委託使用前面的「multiplydelegate += multiply」形式實現新增多個委託方法。如果正在使用多播委託,對同一委託呼叫方法鏈的順序並未正式定義,因此應該避免編寫依賴於以特定順序呼叫方法的**。

多播委託可能出現呼叫方法停止問題。如果委託方法中的某乙個方法丟擲異常,整個迭代就會停止,未執行的方法便不會執行。定義兩個方法one()與two(),其中one()方法中會丟擲乙個異常

private

static

void

one()

private

static

void

two()

在main()方法中建立乙個委託d,引用one和two方法。呼叫委託d,並使用try……catch捕獲異常:

static

void main(string

args)

catch

(exception e)

}

解決多播委託的異常導致整個迭代方法停止問題,便需要有自己的迭代方法。使用delegate類定義getinvocationlist()方法獲取新增到委託的delegate物件陣列,使用迴圈迭代、捕獲異常即可:

static

void main(string

args)

catch

(exception e)

}}

委託的新增可以像前面使用「+」符號新增,同樣的可以使用「-」符號來減少委託。也可以對委託重新賦值為null,清空所有委託。

C 委託基礎1 委託基礎

委託和其委託的方法必須具有相同的簽名。簽名相同 1.引數型別相同 2.引數數量相同 3.返回值一致 例一 class program static void main string args mm 7,6 console.readline 例二 class program double subtra...

c 委託基礎

委託 1.概念 委託是函式的封裝,它代表一 類 函式。它們都符合一定的簽名 擁有相同的引數列表 返回值型別。同時,委託也可以看成是對 函式的抽象,是函式的 類 2.語法 delegate argument list 3.用法 1.宣告委託,比如 public delegate void del st...

C 基礎 委託

一 委託 當我們需要把方法做為引數傳遞給其他方法的時候,就需要使用委託。因為有時候,我們要操作的物件,不是針對資料進行的,而是針對某個方法進行的操作。我們還是來以 入手 using system using system.collections.generic using system.linq u...