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)=>
這是因為你把這個表示式賦值給乙個委託後,而委託的型別是:
publicdelegate
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
今天啥都沒乾,整理一下 聽聽歌 坐等 好久沒有這麼休息過了。繼續聽歌 愛的海洋 演唱 曲婉婷 身在他鄉 志在遠方 你的愛讓我堅強 歌聲蕩漾 你為我鼓掌 沉浸在愛的海洋 從 不敢想到 想去做到 做到我想的 事實證明我並不像他們想象的那樣脆弱 我只是需要一盞燈 一架鋼琴 一支麥克風 身在他鄉 志在遠方 ...