委託,匿名和Lambda
阿新 • • 發佈:2018-12-30
委託實現來型別安全的回撥方法。由於回撥無處不在,所以委託無處不在,時間模型是建立在委託機制上,Lambda表示式本質上就是一種匿名委託。
委託的定義(委託並不等於方法):
你是程式設計的,你現在正在寫一個ASP.NET網頁,而JS是你不熟悉的,於是你委託你的一位同事來幫助你完成JS部分。這就是委託,把你所不能做的事情交給其他人去做。而怎麼知道是哪個人去做呢?當然是要知道名字!而為了區別名字一樣的不同人,因此,需要描述一個特徵。
· public delegate string ProcessDelegate(string s1, string s2);
class Program { static void Main(string[] args) { /* 呼叫方法 */ ProcessDelegate pd = new ProcessDelegate(new Test().Process); Console.WriteLine(pd("Text1", "Text2")); } } public class Test { /// <summary> /// 方法 /// </summary> /// <param name="s1"></param> /// <param name="s2"></param> /// <returns></returns> public string Process(string s1,string s2) { return s1 + s2; } }· 多播委託和委託鏈,以+=和-=操作符分別進行繫結和解除繫結的繫結。多播委託返回值一般為void,委託型別為非void型別
事件:事件是對委託的封裝,從委託的示例中可知,在客戶端可以隨意對委託進行操作,一定程度上破壞來面向的物件的封裝機制,因此時間實現來對委託的封裝。
Lambda,匿名函式,事件的詳解在之後再討論。