中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

基礎才是重(zhong)(zhong)中之重(zhong)(zhong)~委(wei)托(tuo)實例的幾種定義(yi)方式(shi)(規(gui)規(gui)矩(ju)矩(ju)method,邏輯簡單delegate,層次清(qing)晰lambda

 回到目錄

委(wei)(wei)托(tuo)(tuo),一個(ge)不錯(cuo)的東(dong)西,.net中的委(wei)(wei)托(tuo)(tuo)用(yong)著挺爽,它的重要性(xing)以至于微軟把(ba)(ba)它單拿出(chu)來(lai),定義了(le)(le)幾個(ge)現(xian)成的委(wei)(wei)托(tuo)(tuo),如(ru),Func和Action,既然人家把(ba)(ba)最特殊的委(wei)(wei)托(tuo)(tuo)簽名拿 出(chu)來(lai)了(le)(le),所(suo)以咱們就不

自(zi)己去(qu)定義了,就(jiu)用Func和Action委托去(qu)講一個如何定義他們的(de)實例吧,呵呵。

第一 規規矩矩定義方法method

1        /// <summary>
2         /// 與(yu)Func<string>相同(tong)的方法簽名(ming)
3         /// </summary>
4         /// <returns></returns>
5         static string StandardFunc() { return "標準點好(hao)"; }
6         Func<string> Standard = new Func<string>(StandardFunc);//標準(zhun)的(de)委托實例

第二 邏輯簡單匿名方法delegate

在對于方(fang)(fang)(fang)法邏輯簡單(dan)的時(shi)候,我們沒有必須(xu)再(zai)去定義一個額外的方(fang)(fang)(fang)法,而(er)直接使用匿名方(fang)(fang)(fang)法即可

1   Func<string, bool> FuncWhat2 = delegate(string s) { return s == "hello"; };//delegate定(ding)義一個(ge)(ge)匿名方法,不用重新再定(ding)義一個(ge)(ge)方法了
1  Func<bool> FuncWhat3 = delegate() { return true; }; 

第三 層次清晰lambda

同(tong)樣(yang)的邏輯簡單,使用(yong)lambda表(biao)達(da)式(shi)則會使代碼層次(ci)感更清晰,本人超級推(tui)薦,呵呵

1 Func<string, string> FuncWhat4 = (string msg) => hello(msg);

事實上(shang),微軟自己(ji)的類庫,也經常(chang)使用(yong)這種lambda方式,在每個新的技術出現時,小(xiao)微自己(ji)都(dou)先(xian)去嘗試(shi),呵(he)呵(he)。

 1         //
 2         // 摘要(yao):
 3         //     通過使(shi)用實現驗證(zheng)資(zi)源訪問功能的函數(shu),初始化 System.ComponentModel.DataAnnotations.ValidationAttribute
 4         //     類的新實(shi)例。
 5         //
 6         // 參(can)數:
 7         //   errorMessageAccessor:
 8         //     實現驗(yan)證資源訪問的函(han)數(shu)。
 9         //
10         // 異(yi)常:
11         //   System:ArgumentNullException:
12         //     errorMessageAccessor 為 null。
13         protected ValidationAttribute(Func<string> errorMessageAccessor);

上(shang)面我只是一個簡單的舉例,在實(shi)際開發時,還要因情況而定,下面是在實(shi)現項目中的一個應用(yong),當用(yong)戶登陸時,去觸發一個LogOn事件(jian),然后,所(suo)以訂閱了它(ta)的方法都(dou)自(zi)動去處理(li)自(zi)己(ji)的

邏輯,看代碼:

 1     /// <summary>
 2     /// 登陸事(shi)件
 3     /// </summary>
 4     public class LogOnEvent
 5     {
 6 
 7         /// <summary>
 8         /// 登陸后的事件(jian)
 9         /// </summary>
10         public static event Action LogOnAfter;
11 
12         /// <summary>
13         /// 觸(chu)發RegisterAfter事件(在本(ben)程序集中去觸(chu)發)
14         /// </summary>
15         internal static void OnLogOnAfter()
16         {
17             if (LogOnAfter != null)
18             {
19                 LogOnAfter();
20             }
21         }
22 
23     }

而如(ru)果你希望在系(xi)統登陸時,去做一些(xie)事(shi)情,你可以先(xian)去訂閱它就可以了,類型這種:

 1               //lambda方式
 2                 LogOnEvent.LogOnAfter += () =>
 3                 {
 4                     //登陸后要處理的邏輯 
 5                 };
 6                 //匿名(ming)方法方式
 7                 LogOnEvent.LogOnAfter += delegate()
 8                 {
 9                     //登(deng)陸后(hou)要處(chu)理的邏輯 
10                 };
11                 //普(pu)通方(fang)式
12                 LogOnEvent.LogOnAfter += LogDiary;

  回到目錄

posted @ 2012-07-16 17:52  張占嶺  閱讀(1221)  評論(3)    收藏  舉報