我一直在阅读这篇关于闭包的文章,他们说:
所以我根据他们的代码做了一个例子,对我而言,闭包似乎就像常规的命名方法一样,也"无需担心地处理局部变量",其中"所有的管道都是自动的".
或者这个"局部变量的包装"解决了什么问题,使得闭包如此特殊/有趣/有用?
using System;
namespace TestingLambda2872
{
class Program
{
static void Main(string[] args)
{
Func<int, int> AddToIt = AddToItClosure();
Console.WriteLine("the result is {0}", AddToIt(3)); //returns 30
Console.ReadLine();
}
public static Func<int, int> AddToItClosure()
{
int a = 27;
Func<int, int> func = s => s + a;
return func;
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以这个问题的答案就是阅读Jon Skeet关于 Marc指出的闭包的文章.本文不仅展示了在C#中导致lambda表达式的演变,还展示了如何在Java中处理闭包,这是本主题的优秀读物.
我想每隔X秒调用一次函数.我读了关于System.Threading.Timer的SO,所以我这样做:
Timer timer = new Timer(new TimerCallback(TimeCallBack), null, 0, 50000);
Run Code Online (Sandbox Code Playgroud)
调用函数:
void TimeCallBack();
Run Code Online (Sandbox Code Playgroud)
但是,我想将一个参数传递给该函数,以便计时器调用以下函数:
void TimeCallBack(MyClass mc);
Run Code Online (Sandbox Code Playgroud)
我可以让我通过全球的实例,但我宁愿通过它.从我看到的TimerCallback委托在Timer构造函数中使用.我可以用任何方式使用自己的委托/函数调用吗?