zoukankan      html  css  js  c++  java
  • 委托传参,lambda

    今天一朋友问到一问题,怎么在timer的委托里面传参数,我初一想Invoke

    可以传参数吧,我就说了。 后来他说这个委托是微软定义,不能变参数,于是我就自己写了一段代码试

    试. 我最初写的代码如下

        public class A
        {
            public string p = string.Empty;
            public void foo(object sender, System.Timers.ElapsedEventArgs e)
            {
                B.foo(p);
            }
        }
    

      然后在循环里 为A的对象传参数

                string[] a = { "a", "b", "c" };
    
                System.Timers.Timer timer = new System.Timers.Timer();
                timer.Interval = 1000;
    
    
                foreach (string s in a)
                {
                    A aaa = new A();
                    aaa.p = s;
                    timer.Elapsed += aaa.foo;
                }
                timer.Start();
    

      

    这样是实现了效果,但是我不是很爽,因为如果我很多参数,那我不是要创

    建很多A的对象,如果A中还有其它的数据,那是否是浪费空间呢?

    后在我修改了一个版本,如下

        public static class B
        {
            public static void foo(string s)
            {
                Console.WriteLine(s);
            }
        }

    这个是要接受参数运行的方法

    调用的地方就用lambda表达式实现变量,参数穿越效果,

                foreach (string s in a)
                {
                    timer.Elapsed +=(sender,e)=>{B.foo(s);};
                }

      这样代码简单,而且空间不浪费。

  • 相关阅读:
    jsgraphics插件图形库
    MySQL 基础知识
    第四天:任务开始——网络驱动
    第三天:软件著作权申请
    第二天:办公流程及软件安装
    第一天:products和一些感想
    IMX6Q RTC驱动分析
    PLATFORM设备驱动
    字符设备驱动以及杂项设备驱动
    C程序编译过程及优化选项介绍
  • 原文地址:https://www.cnblogs.com/gw2010/p/3443267.html
Copyright © 2011-2022 走看看