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);};
                }

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

  • 相关阅读:
    Java--动态代理
    java-finalize
    Oauth1.0认证过程
    深入理解-HashMap
    Java--对象内存布局
    Java--finally
    一个非常有用的算法---统计二进制数中1的个数
    进程之间通信
    SpringMVC听课笔记(十三:使用拦截器)
    SpringMVC听课笔记(十二:文件的上传)
  • 原文地址:https://www.cnblogs.com/gw2010/p/3443267.html
Copyright © 2011-2022 走看看