基礎こそ重中の重~委託例のいくつかの定義方式(規則モーメントmethod,論理単純delegate,階層明瞭lambda

9667 ワード

カタログに戻る
依頼、1つの悪くないもの、.netの中の依頼はとてもさわやかで、その重要性はマイクロソフトがそれを単に出して、いくつかの既成の依頼を定義して、例えば、FuncとAction、人が最も特殊な依頼の署名を出した以上、私达は
自分で定義して、FuncとActionで依頼して彼らの実例をどのように定義するかを話しましょう、ほほほ.
第一規則モーメント定義方法method
1        /// <summary>
2         ///  Func<string>       
3         /// </summary>
4         /// <returns></returns>
5         static string StandardFunc() { return "    "; }
6         Func<string> Standard = new Func<string>(StandardFunc);//       

第2の論理単純匿名メソッドdelegate
メソッドロジックが簡単な場合、匿名メソッドを直接使用するには、追加のメソッドを定義する必要はありません.
1   Func<string, bool> FuncWhat2 = delegate(string s) { return s == "hello"; };//delegate        ,            
1  Func<bool> FuncWhat3 = delegate() { return true; }; 

第3階層明瞭lambda
同じロジックは简単で、lambda式を使うとコードの階層感をもっとはっきりさせることができて、私はとても推荐して、ほほほ
1 Func<string, string> FuncWhat4 = (string msg) => hello(msg);

実際、マイクロソフト自身のクラスライブラリも、このようなlambda方式をよく使用しており、新しい技術が登場するたびに、マイクロ自身が先に試してみましょう.
 1         //
 2         //   :
 3         //                      ,    System.ComponentModel.DataAnnotations.ValidationAttribute
 4         // 5         //
 6         //   :
 7         //   errorMessageAccessor:
 8         // 9         //
10         //   :
11         //   System:ArgumentNullException:
12         //     errorMessageAccessor   null。
13         protected ValidationAttribute(Func<string> errorMessageAccessor);

上の私はただ1つの简単な例で、実际に开発する时、また情况によって决めて、以下はプロジェクトの中の1つのアプリケーションを実现して、ユーザーが登录する时、1つのLogOn事件をトリガして、それから、その方法を購読してすべて自动的に自分の
論理、コードを見る:
 1     /// <summary>
 2     ///     
 3     /// </summary>
 4     public class LogOnEvent
 5     {
 6 
 7         /// <summary>
 8         ///       
 9         /// </summary>
10         public static event Action LogOnAfter;
11 
12         /// <summary>
13         ///   RegisterAfter  (         )
14         /// </summary>
15         internal static void OnLogOnAfter()
16         {
17             if (LogOnAfter != null)
18             {
19                 LogOnAfter();
20             }
21         }
22 
23     }

システムにログインするときに何かをしたい場合は、まず購読すればいいです.
 1               //lambda  
 2                 LogOnEvent.LogOnAfter += () =>
 3                 {
 4                     //          
 5                 };
 6                 //      
 7                 LogOnEvent.LogOnAfter += delegate()
 8                 {
 9                     //          
10                 };
11                 //    
12                 LogOnEvent.LogOnAfter += LogDiary;

   カタログに戻る