zoukankan      html  css  js  c++  java
  • 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("
    ");
     8 
     9             Console.WriteLine("使用匿名方法的示例:");
    10             FindListAnonymousMethod();
    11             Console.Write("
    ");
    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}	", 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}	", 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}	", str);
    76             }
    77         }
    78 
    79     }
    委托,匿名方法,lambda表达式

     :刚开始委托其实很难理解,网上也有一大堆,但是有些过于繁琐

    最通俗的来理解  到底 委托匿名方法lambda之间三者的关系:

    起先,  1:   委托简化代码的编写量

         2: 后来觉得代码多了,搞一个匿名方法

         3: 再后来,匿名方法也麻烦,就搞了一个lambda表达式,

            完了,lambda简单吧,所以就是这样

    2017-2-22补充

     

  • 相关阅读:
    服务器的Redis连接不上解决方案
    给大家推荐一个很好的自学网站
    简单说下HashMap的实现原理
    LinkedList源码解析
    你要了解的jvm
    单例设计
    百度编辑器删除旧的图片
    Ueditor 单图、多图、视频、附件的上传及在线管理总结
    上传新图片删除旧图片
    webapi发布IIS时出现500.19错误:不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的(overrideModeDefault="Deny")或者是通过包含overrideModeDefault="Deny"....
  • 原文地址:https://www.cnblogs.com/LZXX/p/6285842.html
Copyright © 2011-2022 走看看