C 基礎 委託 Lambda表示式和事件

2021-10-23 02:22:33 字數 1803 閱讀 9388

下面用乙個例子簡單展示下委託、lambda表示式和事件的應用

使用氣泡排序實現任意物件的排序:

要排序的employee類:

using system;

using system.collections.generic;

using system.text;

namespace 委託_lambda表示式和事件

public

string name

public

decimal salary

public

override

string

tostring()

=> $", "

;public

static

bool

comparesalary

(employee e1,

employee e2)

=> e1.salary < e2.salary;

}}

氣泡排序方法:

using system;

using system.collections.generic;

using system.text;

namespace 委託_lambda表示式和事件}}

while;}

}}

執行:

using system;

namespace 委託_lambda表示式和事件

; bubblesorter.

sort

(employees, employee.comparesalary)

;foreach

(var employee in employees)}}

}

多播委託:委託包含多個方法,稱這種委託為多播委託

*對同乙個委託,呼叫其方法鏈的順序並未正式定義。因此應避免編寫依賴於以特定順序呼叫方法的**。

*多播委託包含乙個逐個呼叫的委託集合。如果通過委託呼叫的其中乙個方法丟擲乙個異常,整個迭代就會停止。

在這種情況下,為了避免這個問題,應自己迭代方法列表。delegate類定義getinvocationlist()方法,它返回乙個delegate物件陣列。可以使用這個委託呼叫與 委託直接相關的方法,捕獲異常,並繼續下一次迭代:

static

void

main()

catch

(exception)}

}

lambda表示式

符號:=>

例:無參

func<

string

,string

> oneparam = s =

> $"change uppercase "

;

多參

func<

double

,double

,double

> twoparamswithtypes =

(double x,

double y)

=> x * y;

// 引數型別可省

func<

double

,double

,double

> twoparams =

(x, y)

=> x * y;

C 中委託和Lambda表示式

什麼是委託?簡單來說委託是乙個型別,這個型別可以賦值乙個方法的引用。delegate return type delegate name parameter type parameter name,1.delegate name delegate instance new delegate name...

關於C 委託和Lambda表示式

關於c 委託和lambda表示式 1 c 委託和lambda表示式結合定義方法非常方便 在定一次性方法有很好的應用 沒有返回值的委託和lambda表示式結合 普通委託 getproductnoreturn getproductnoreturn a 沒有引數的委託和lambda表示式結合 普通委託 g...

委託 lambda表示式

呼叫委託的的時候,其包含的每乙個方法都會被執行。委託要求,定義的簽名和返回型別必須一致。建立委託需要注意的地方 因為大部分的委託需要重用,而事件不用,所以前者寫在類外邊,後者寫在類裡邊。一般委託寫在類的外邊,並且用public宣告。委託只有乙個規矩,就是輸入輸出一樣就行,那他屬於乙個委託,你可以把它...