zoukankan      html  css  js  c++  java
  • LinQ—Lambda表达式

    概述

       本篇博客主要解说lambda表达式,在这里将它的来龙去脉,主要是从托付,匿名函数这些方面过度讲的,当然,在讲托付和匿名函数的时候,主要是从Lambda的角度出发讲的,可能它们还具有其他的一些作用或用途,但这已不是本篇博客的重点了,好了接下来我们開始。

     

    托付

     概念

        托付就是一个指针变量,一个存放一类方法的指针变量。

     优点

        托付给我们变成带来了什么优点呢?举个样例:BLL层里面有一个类A,一个类B,类A中有a方法,类B中有b方法,我们要想实现a方法中调用b方法,方式有两种。

        一种是在a方法中直接调用b方法;还有一种是a方法直接调用托付x(看上面的托付定义),然后,在U层中,当我们使用A类的a方法时,再将B类的b方法赋值给托付x,从而达到a方法调用托付x(b方法)

        从这两种实现方式来说,另外一种方式更加的灵活,由于没有将b方法直接写死在a方法里,所以,之后的一些变动,我们不须要改动BLLAa方法里的代码了(假设里面的逻辑非常复杂,改动时非常危急和麻烦的),仅仅须要加入�一些类一些方法就能够了,直接在U层改动(变化必定会改动,这个无法改变,可是,怎么变动会更加简单非常重要),这样会使我们工作非常的简单。这个就是托付的一个优点。

     

    匿名函数

        匿名函数就是没有名称的函数,应用的场景就是,不须要函数重用,即:这个函数就用一次。举个样例说,U层使用A类的a方法时,直接给a方法传递一个匿名函数(a方法參数的定义时,须要使用托付),至于为什么给a方法传递一个匿名函数,由于a方法里须要调用这个匿名方法,须要用这些逻辑运算,而这些逻辑运算仅仅须要用一次,所以,传递一个匿名方法,这样就不用多此一举的再创建一个类,类里面在写上方法(刚刚的匿名方法),由于这样创建全然没有必要(就使用这么一次),假设这样创建一个多余的类的话,对于U层调用时,不方便代码的阅读,而是结构也是不易理解的。


    Lambda表达式

        Lambda表达式就是一个升级版的匿名函数,它的优点使代码变得阅读变得更加的easy,代码变得也更加的紧凑。使代码变得更加的紧凑是匿名函数解决的一个问题,Lambda表达式,再次基础上攻克了匿名函数的不便阅读问题。

     

    实例

        Lambda表达式的发展历史上,我们解释了托付,匿名函数,接下了,我们就进行对应的Demo演示

     托付和普通函数的比較

    <span style="font-size:18px;">using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace function1
    {
        public class class1
        {
            public string GetName1() {
                return "直接写死的方法";
            }
    
            public string GetName2() {
                return "通过托付实现";
            }
        }
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace function1
    {
        //普通托付
        public delegate string MyDelegateClass();   
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace function1
    {
        public class class3
        {         
            public string GetName(MyDelegateClass myEnTrustFunction) { 
                return myEnTrustFunction();
            }
    
            public string GetName() {
                return new class1().GetName1();
            }
        }
    }</span>

    托付函数和托付匿名函数的比較

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace function2
    {
        public class class1
        {
            public string GetName1(MyDelegateClass myFunction) {
                return myFunction();
            }
        }
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace function2
    {
        //普通托付
        public delegate string MyDelegateClass();  
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace function2
    {
        public class class3
        {
            public string GetName() {
                return "托付函数";
            }
        }
    }
    

    托付匿名函数和托付Lambda表达式的比較

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace function3
    {
        //普通托付
        public delegate string MyDelegateClass();  
    }
    <span style="font-family: 宋体;">using System;</span>
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace function3
    {
        public class Class2
        {
            public string GetName(MyDelegateClass myFunction){
                return myFunction();
            }
        }
    }
    

    client代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 学习.Lambda表达式
    {
        class Program
        {
            static void Main(string[] args)
            {
                #region 托付和普通函数的比較
                //function1.class3 fun1 = new function1.class3();
                //Console.WriteLine(fun1.GetName());
                //Console.WriteLine(fun1.GetName(new function1.class1().GetName2));
                #endregion
    
                #region 托付函数和托付匿名函数的比較
                //function2.class1 fClass1 = new function2.class1();
                //Console.WriteLine(fClass1.GetName1(new function2.class3().GetName));
                //Console.WriteLine(fClass1.GetName1(delegate() { return "匿名函数"; }));
                #endregion
    
                #region 托付匿名函数和托付lambda表达式的比較
                function3.Class2 class2 = new function3.Class2();
    
                Console.WriteLine(class2.GetName(delegate() { return "匿名函数"; }));
                class2.GetName(() => { return "Lambda表达式"; });
                #endregion
                
                Console.Read();
            }
        }
    }
    

    总结

        托付使代码变得更加的灵活,基类代码不再是死板的,避免了改动逻辑比較复杂的代码;匿名函数攻克了为只使用一次的方法的创建的复杂性,使代码变得更加的紧凑;Lambda表达式,具有了匿名函数的长处,同一时候攻克了匿名函数不便阅读的问题。

  • 相关阅读:
    C语言文法
    实验一
    词法分析
    py中文词频统计
    py字符串练习
    py画了个国旗
    熟悉常用的Linux操作
    大数据概述
    实验三、 递归下降分析程序实验
    简易c语言LL(1)文法
  • 原文地址:https://www.cnblogs.com/blfshiye/p/3788081.html
Copyright © 2011-2022 走看看