当前位置:  开发笔记 > 编程语言 > 正文

闭包 - 捕获变量和将它们作为参数读取之间的差异

如何解决《闭包-捕获变量和将它们作为参数读取之间的差异》经验,为你挑选了0个好方法。

假设我们有这个课程:

// Provides deferred behaviour
public class Command
{
     private Func _executeFunction;
     private object[] _args;

     public Command(Func execution, params object[] arguments)
     {
          _executeFunction = execution;
          _args = arguments;
     }

     public TResult Execute()
     {
          return _executeFunction(_args);
     }
}

这两个匿名函数有什么区别?

int a = 1;
int b = 4;

// a and b are passed in as arguments to the function
Command sum = new Command(args => (int)args[0] + (int)args[1], a, b);

// a and b are captured by the function
Command sum2 = new Command(_ => a + b);

Console.WriteLine(sum.Execute()); //Prints out 5
Console.WriteLine(sum2.Execute()); //Prints out 5

我特意寻找性能差异.

另外,我们知道,如果一些类举行的参考sum2,然后ab会活过,他们就被定义范围,可能永远不会得到由GC收集函数是否依然任何地方引用.

是否会发生同样的事情sum?(考虑参数是引用类型而不是本示例中的值类型)

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有