c#-委托,匿名方法,lambda表達的關系


什么是委托:

包含單個方法的委托和函數指針是相似的,不同的是,委托是面向對象的並且是類型安全的

聲明委托類型:

delegate void mydel(int x);

聲明委托和聲明方法差不多,兩個不通點就在於

委托以:delegate關鍵詞開頭。沒有方法主體

創建委托對象:

del =new mydel(示例方法);

組合委托:

mydel  dela=方法;

mydel delb=方法

mydel delc=dela+delb;

委托增減方法

mydel del=方法//創建初始化

del+=方法;//增加方法

del-=方法;//刪減方法

 

匿名方法:

 

delegate int del(int param);

static void main()

{

  del  mydel=delgate(intx){return x+20};

 ....

}

lambda方法:

mydel del=delegate(int x){return x+1;}//匿名方法

mydel del=            (int x)=>{return +1;}//lambda表達式(方法)

控制台

 1  class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             Console.WriteLine("傳統委托代碼示例:");
 6             FindListDelegate();
 7             Console.Write("\n");
 8 
 9             Console.WriteLine("使用匿名方法的示例:");
10             FindListAnonymousMethod();
11             Console.Write("\n");
12 
13             Console.WriteLine("使用Lambda的示例");
14             FindListLambdaExpression();
15 
16             Console.Read();
17 
18     
19 
20         }
21         //傳統的調用委托的實例
22         static void FindListDelegate()
23         {
24             //創建泛型list類
25             List<string> list = new List<string>();
26 
27             list.AddRange(new string[] { "asp.net課程","Java課程","123" });
28             Predicate<string> findPredicate = new Predicate<string>(IsBookCategory);
29             List<string> bookCategory = list.FindAll(findPredicate);
30 
31             foreach (string str in bookCategory)
32             {
33                 Console.WriteLine("{0}\t", str);
34             }
35         }
36         //謂詞方法,傳遞給FindALl進行書籍分類判斷
37         static bool IsBookCategory(string str)
38         {
39             return str.EndsWith("課程") ? true : false;
40         }
41 
42         //使用匿名方法來進行搜索過程
43 
44         static void FindListAnonymousMethod()
45         {
46             //先創建泛型list類
47             List<string> list = new List<string>();
48             list.AddRange(new string[] { "asp.net課程", "MVC課程,123" });
49 
50             //在這里,使用匿名方法直接為委托創建一個代碼塊,而不用去創建單獨的方法
51 
52             List<string> bookCategory = list.FindAll(delegate(string str)
53                 {
54                     return str.EndsWith("課程") ? true : false;
55                 }
56                 );
57             foreach (string str in bookCategory)
58             {
59                 Console.WriteLine("{0}\t", str);
60             }
61         }
62         //使用lambda來實現搜索過程
63         static void FindListLambdaExpression()
64         {
65  
66             //先創建一個泛型的list類
67             List<string> list = new List<string>();
68             list.AddRange(new string[] { "asp.net課程", "MVC課程","123" });
69             //在這里使用lambda來創建一個委托方法
70 
71             List<string> bookCategory = list.FindAll((string str) => str.EndsWith("課程"));
72 
73             foreach (string str in bookCategory)
74             {
75                 Console.WriteLine("{0}\t", str);
76             }
77         }
78 
79     }
委托,匿名方法,lambda表達式

 

 :剛開始委托其實很難理解,網上也有一大堆,但是有些過於繁瑣

最通俗的來理解  到底 委托匿名方法lambda之間三者的關系:

 

起先,  1:   委托簡化代碼的編寫量

     2: 后來覺得代碼多了,搞一個匿名方法

     3: 再后來,匿名方法也麻煩,就搞了一個lambda表達式,

 

        完了,lambda簡單吧,所以就是這樣

 

2017-2-22補充

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM