下面用乙個例子簡單展示下委託、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宣告。委託只有乙個規矩,就是輸入輸出一樣就行,那他屬於乙個委託,你可以把它...