首页 > Windows开发 > 详细

c#-委托,匿名方法,lambda表达的关系

时间:2017-01-14 18:38:14      阅读:332      评论:0      收藏:0      [点我收藏+]

什么是委托:

包含单个方法的委托和函数指针是相似的,不同的是,委托是面向帝乡的并且是类型安全的

声明委托类型:

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 coid 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简单吧,所以就是这样

 

c#-委托,匿名方法,lambda表达的关系

原文:http://www.cnblogs.com/LZXX/p/6285842.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!