zoukankan      html  css  js  c++  java
  • 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();
            }
    

      执行结果为

  • 相关阅读:
    Django的一点基本知识点
    python函数定义及作用域
    爬取妹子图片
    mysql常用命令大全
    python扫面端口
    python中重要的基础概念
    pexpect模块获取root密码
    mysql
    requests库
    C#中使用SQLite数据库简介(上)
  • 原文地址:https://www.cnblogs.com/aehyok/p/2922072.html
Copyright © 2011-2022 走看看