• C#委托四(匿名方法)


    什么是匿名方法?
     
    匿名方法是C#2.0引入的一个新特性,它允许开发者声明自己的函数代码而无须使用委托函数。
     
    C#为委托提供一种机制,可以为委托定义匿名方法,匿名方法没有名称,编译器会定指定一个名称,匿名方法中不能使用跳转语句跳转到该匿名方法的外部,也不能跳转到该方法的内部。也不能在匿名方法外部使用的ref和out参数。
     
    通过使用匿名方法,可以不必创建单独的方法,因此减少了实例化委托所需的编码系统开销。例如,如果创建方法所需的系统开销是不必要的,则指定代码块(而不是委托)可能非常有用。

    什么时候该使用匿名方法
     
    1.需要一个临时方法,该方法使用次数极少;
     
    2.这个方法的代码很短,甚至可能比方法声明都短的情况下使用。

    下面看一下简单的小例子:

        class Program
        {
    
            static void MethodTest(string Test)
            {
                Console.WriteLine("简单方法执行!");
            }
    
            /// <summary>
            /// 声明一个委托,用于实现多播操作
            /// </summary>
            /// <param name="Test"></param>
            delegate void MyMulticastDelegate(string Test);
    
            static void Main(string[] args)
            {
                MyMulticastDelegate MyFirst = new MyMulticastDelegate(MethodTest);
                MyMulticastDelegate multicastDelegate = MyFirst;
                multicastDelegate("Test");
    
           ///////////////////////////////////////////////////////         
    string Test = "test"; MyMulticastDelegate md = new MyMulticastDelegate( delegate(string Test1) { Console.WriteLine("简单方法执行!"); } ); md(Test); Console.Read(); } }

      通过上面代码可以看到,上面是通过委托实现方法调用的,下面的就是通过匿名方法实现的。

    查看执行后的效果:

    C#3.0之后匿名方法可以使用λ表达式来进行定义
     
    无论是拉姆达(lambda)表达式(匿名函数、是匿名类) ,都能归属到一种叫闭包的东西上面。
     
    左边是参数,使用括号表达 (string param),可以是 (param)这样不定义类型,编译器会推断出来,只有一个参数的时候可以不使用括号。右边是实现代码,使用花括号,如果代码只有一行,则不使用花括号和return关键字也可以,编译器会为我们添加。
     
    这是λ表达式的简单实现↓

            /// <summary>
            /// 声明一个委托,用于实现多播操作
            /// </summary>
            /// <param name="Test"></param>
            delegate string MyMulticastDelegate(string Test);
    
            static void Main(string[] args)
            {
                string str1 = "Test1";
                string str2 = "Test2";
                MyMulticastDelegate my = param => param + str1 + str2;
                MyMulticastDelegate my2 = (string param) => { return param + str1 + str2; };
                Console.WriteLine(my("Test"));
                Console.WriteLine(my2("aaaa"));
                Console.Read();
            }
    

      执行结果为

  • 相关阅读:
    (三十四)在所有的添加方法上记录一下(添加操作)
    (三十三)订单管理-修改订单状态
    (三十二)订单管理-查询订单详情
    (三十一)订单管理-查询订单
    (三十)商品管理-添加商品(上传图片)
    1.python的安装
    require(): open_basedir restriction in effect. File(/www/wwwroot/xcx/zerg/thinkphp/start.php) is not within the allowed path(s): (/www/wwwroot/xcx/zerg/public/:/tmp/:/proc/) in /www/wwwroot/xcx/zerg/p
    phpstorm-xdebug的安装
    swoole在线聊天学习笔记
    18.swoole学习笔记--案例
  • 原文地址:https://www.cnblogs.com/aehyok/p/2922072.html
Copyright © 2020-2023  润新知