相关疑难解决方法(0)

关闭有什么特别之处?

我一直在阅读这篇关于闭包的文章,他们说:

  • "所有的管道都是自动的"
  • 编译器"创建一个包装类"并"延长变量的生命周期"
  • "你可以毫无顾虑地使用局部变量"
  • .NET编译器为您处理管道等.

所以我根据他们的代码做了一个例子,对我而言,闭包似乎就像常规的命名方法一样,也"无需担心地处理局部变量",其中"所有的管道都是自动的".

或者这个"局部变量的包装"解决了什么问题,使得闭包如此特殊/有趣/有用?

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中处理闭包,这是本主题的优秀读物.

c# closures

12
推荐指数
1
解决办法
746
查看次数

C#timer - 调度对接受参数的函数的调用

我想每隔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构造函数中使用.我可以用任何方式使用自己的委托/函数调用吗?

c# delegates timer

1
推荐指数
1
解决办法
5410
查看次数

标签 统计

c# ×2

closures ×1

delegates ×1

timer ×1