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

     

  • 相关阅读:
    《C程序设计语言现代方法》第5章 选择语句
    《C语言程序设计现代方法》第4章 编程题
    《C语言程序设计现代方法》第4章 表达式
    《算法竞赛入门经典》第1章 程序设计入门
    《C语言程序设计现代方法》第3章 格式化输入/输出
    《C语言程序设计现代方法》第2章 编程题
    《C语言程序设计现代方法》第2章 C语言基本概念
    《C语言程序设计现代方法》第1章 C语言概述
    Linux和Windows下的进程管理总结
    silvetlight ListBox Item项自动填满
  • 原文地址:https://www.cnblogs.com/LZXX/p/6285842.html
Copyright © 2011-2022 走看看