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补充

 

 

 

 

posted @ 2017-01-14 17:56  12不懂3  阅读(3562)  评论(2编辑  收藏  举报
创作不易,请勿抄袭,欢迎转载!