• 匿名函数


      class Program
        {
            // 定义投票委托
            delegate void VoteDelegate(string name);
    
            static void Main(string[] args)
            {
                // 实例化委托对象
                VoteDelegate votedelegate = new VoteDelegate(new Friend().Vote);
    
                // 使用匿名方法的代码
                // 匿名方法内联了一个委托实例(可以对照上面的委托实例化的代码来理解)
                // 使用匿名方法后,我们就不需要定义一个Friend类以及单独定义一个投票方法
                // 这样就可以减少代码量,代码少了,阅读起来就容易多了,以至于不会让过多的回调方法的定义而弄糊涂了
                //VoteDelegate votedelegate = delegate(string nickname)
                //{
                //    Console.WriteLine("昵称为:{0} 来帮Learning Hard投票了", nickname);
                //};
    
                // 通过调用托来回调Vote()方法
                votedelegate("SomeBody");
                Console.Read();
            }
        }
    
        public class Friend
        {
            // 朋友的投票方法
            public void Vote(string nickname)
            {
                Console.WriteLine("昵称为:{0} 来帮Learning Hard投票了", nickname);
            }
        }

    看一下无注释的

    class Program
    {
    delegate void toupiao(string name);

    static void Main(string[] args)
    {

    toupiao t = new Person().Fun;
    t += new Person().Fun1;

    //toupiao t = delegate (string name)
    // {
    // Console.WriteLine(name + "啊票");
    // };

    // t += delegate (string name)
    // {
    // Console.WriteLine(name + "弃票");
    // };


    t("hehehe");
    }
    }

    class Person
    {
    public void Fun(string name)
    {
    Console.WriteLine(name + "投票");
    }

    public void Fun1(string name)
    {
    Console.WriteLine(name + "弃票");
    }
    }

    匿名函数还可以不传参数注册

    toupiao t = delegate
    {
    Console.WriteLine("啊票");
    };

    t += delegate
    {
    Console.WriteLine( "弃票");
    };

    lambda表达式表示更简便,不过lambda不允许无参数注册

    toupiao t = (x) => { Console.WriteLine(x + "投票"); };
    t += (x) => { Console.WriteLine(x + "弃票"); };

    Lambda表达式和匿名方法表达式的区别:

    1. 当没有参数的时候,匿名方法表达式允许完全省略参数列表,从而可以转换为具有任意值参数列表的委托类型,Lambda表达式则不能省略参数列表的圆括号()。

    2. Lambda表达式允许省略和推断类型参数,而匿名方法表达式要求显式声明参数类型。

    3. Lambda表达式主体可以为表达式或者代码块,而匿名方法表达式的主体必须为代码块。

    4. 只有Lambda表达式可以兼容到表达式树类型。

    本博客所有内容均为原创,转载请注明出处.
  • 相关阅读:
    解决express不是内部或外部命令
    spring ioc认识
    Filter编码过滤
    call、apply、bind
    js面向对象浅析
    由clientWidth到document
    401
    删除页面中Form下面隐藏的ViewStatue
    asp.net 下载
    day98
  • 原文地址:https://www.cnblogs.com/what-lee/p/9258768.html
Copyright © 2020-2023  润新知