zoukankan      html  css  js  c++  java
  • 委托,匿名方法,Lambda 表达式 的关系

    1. 相关概念:
    2. 如何使用:
    3. 三者间的关系:

    相关概念:
     什么是委托?
        关于委托是什么及如何使用,网上及博客园里有很多相关介绍, 这里我不再赘述。委托是一种引用方法的类型(MSDN)。
     什么是匿名方法?
        我理解为是委托的一种实现方式,也是一种匿名函数。区别于正式签名方法,匿名方法不必创建单独的方法,减少了实例化委托所需的编码系统开销(MSDN)。
     什么是 Lambda 表达式:
        其实质上是一个匿名函数(MSDN

    如何使用:
        相关使用方法已在相关 MSDN 上有介绍,这里我贴一段 冒泡排序算法的实现代码,相关使用方法在注释里()。
    冒泡排序
            //声明委托 
            delegate string getText(int[] arr);
            
    private void dowork() {

                
    //使用匿名方法
                getText toString = delegate(int[] arr)
                {
                    
    string result = "";
                    
    //int temp = 0;
                    foreach (var i in arr)
                    {
                        result 
    += string.Format("{0} ,", i);
                    }
                    
    return result;
                };

                
    // lambda 表达式 
                getText Sort = (int[] arr) => {
                    
    string result = "";
                    
    for (int i = 1; i < arr.Length; i++) {
                        
    if (arr[i - 1> arr[i])
                        {
                            
    int temp = arr[i-1];
                            arr[i 
    - 1= arr[i];
                            arr[i] 
    = temp;
                        }
                    }
                    
    //使用匿名方法 
                    result = toString(arr);
                    
    return result;
                };
                
                
    int[] arrInt = { 2186712 };
                
    string text = toString(arrInt) + "\r\n" + Sort(arrInt); ;
                tbdebug.Text 
    += text;
            }




    三者之间的关系:
    从相关概念及使用方法上我们可以看出:匿名方法, Lambda表达式 都是匿名函数,均可作为委托的一种实现方式。


    ------------------------------ 分割线 2010-6-29  ------------------------------
    补充:在 .net 2.0 中及以后出现了 System.Action 和 System.Func 两个委托,可以部分地替代我们需要显式声明委托。两者用法相似,但其区别是: Action 不需要返回值, Func 则需要返回指定的类型值。
    如:
      public static void Main()
           {
                Func
    <int,int> cal = Square; 
               Console.Write(
    "the result of {0} is {1}"10, cal(10));

               
    /*****  结合 Lambda 表达式 *****/
               Func
    <intint> cals = (int s) =>return s+10 ;}
               Console.Write(
    "the result of {0} is {1}"10, cals(5));

           }
            
    private  static int Square(int size)
           {
                
    return size*size;
           }
    ------------------------------ End 分割线 ------------------------------
  • 相关阅读:
    计算机网络拓扑结构
    中继器,集线器,网桥,交换机,路由器
    网络层次模型
    广播域和冲突域
    Tomcat
    Log4j
    Eclipse实用快捷键
    WebService是什么?
    定时任务处理-Quartz
    MySQL内存表-临时表
  • 原文地址:https://www.cnblogs.com/infozero/p/1681507.html
Copyright © 2011-2022 走看看