委託的記憶碎片

2021-09-08 02:16:23 字數 1792 閱讀 7246

1、委託

定義:定義委託就是定義一類方法的型別,方法型別分類原則是根據引數和返回值的不同來分類的。

什麼!你說方法分類還考慮返回值的型別嗎?方法的過載可不會考慮方法的返回值的不同,只看方法的引數列表的啊。

是的,方法過載中的方法區分的方法是不看返回值的,但是定義委託是看方法返回值的。

例如:兩個int引數返回乙個boolean,這就可以用委託定義一類方法,c#的表示式:

public delegate bool mydelegate(int i,int j);

這時候mydelegate就是指有兩個int引數,bool返回值的方法型別,他的實類就是乙個包含兩個int引數,bool返回值的方法。

當委託作為方法的引數使用時,直接使用例項的方法名,如:

public void bobbsort(int list, mydelegate de)

main()

這裡要說明一下,從以前呼叫方法的經驗來看,這邊的委託方法例項呼叫是有區別的,並並沒有方法的引數列表。

2、匿名方法

定義:沒有實際方法宣告的委託例項。

這句話的意思是:是乙個委託例項,而委託例項是乙個方法,是乙個沒有沒有實際方法宣告的方法,其實方法的定義沒有乙個方法名稱而是直接放回給乙個委託。如:

mydelete mydelegate;

mydelegate = delegate(int first,int second)

;

3、c#3.0引入了lampda表示式

比匿名方法更加簡潔的一種匿名函式語法。這裡的匿名函式泛指lambda表示式和匿名方法,其中lambda表示式分成表示式lambda和語句lambda。

語句lambda:

(int first,int second)=>

匿名方法:

delegate(int first,int second)

以上的兩段的**功能一樣。其實都是乙個沒有方法名的方法,但是可以直接賦值給這個型別的委託,成為乙個委託例項。

語句lambda還可以省略引數的型別:

(first,second)=>

這是因為你把這個表示式賦值給乙個委託後,而委託的型別是:

public

delegate

bool mydelegate(int i,int j);

這樣編譯器會自己判斷。

無引數的語句lambda:

func getuserinput =

()=>

while(input.trim().length == 0);

return input;

}

圓括號規則例外,當編譯器能推斷資料型別,而且只有乙個輸入引數,語句lambda可以不帶圓括號:

process=>

表示式lambda:就是只有乙個表示式,沒有語句塊。如:

(f,s)=>f

就是沒有return語句及大括號,其實這個表示式本身就是乙個返回語句。

記憶的碎片

彼得的龍 是一部優秀地動畫現實電影,對童話地重新解構並且重組,在現實中出現奇幻故事!情理之中,又在意料之內地完美結局,不愧是一部優秀地電影!根據1977年迪士尼經典動畫 妙妙龍 改編,是許多美國人的童年回憶。對於彼得與龍的相遇,就是溫情的故事,彼得稚嫩的手撫摸著龍,龍保護了他!之後的故事走向也是很符...

事件的記憶碎片

前言 委託型別的例項是儲存著乙個方法,並通過委託來呼叫那個方法,但是委託還有其他的用途。先講乙個模式 publish subscribe 訂閱 發布 它是應對這樣的乙個場景情形 就是把單一事件的通知廣播給多個訂閱者。這句話通俗一點講的話就是 現在有方法a b c d e,自己想呼叫這五個方法中的全部...

記憶碎片 2015 09 11

今天啥都沒乾,整理一下 聽聽歌 坐等 好久沒有這麼休息過了。繼續聽歌 愛的海洋 演唱 曲婉婷 身在他鄉 志在遠方 你的愛讓我堅強 歌聲蕩漾 你為我鼓掌 沉浸在愛的海洋 從 不敢想到 想去做到 做到我想的 事實證明我並不像他們想象的那樣脆弱 我只是需要一盞燈 一架鋼琴 一支麥克風 身在他鄉 志在遠方 ...