我已经阅读了有关stackflow和其他来源的闭包的前几个主题,有一件事仍然令我感到困惑.从技术上来说,闭包只是包含函数代码和该函数中绑定变量值的数据集.
换句话说,从技术上讲,以下C函数应该是我理解的闭包:
int count()
{
static int x = 0;
return x++;
}
Run Code Online (Sandbox Code Playgroud)
然而,我读到的所有东西似乎暗示闭包必须以某种方式将函数作为第一类对象传递.此外,通常似乎暗示闭包不是程序编程的一部分.这是一个解决方案与它解决的问题过度相关的情况,还是我误解了确切的定义?
在C#中创建控件数组时,如何将接收单击按钮索引的函数绑定到其click事件?
以下是一些仅用于更好理解的代码.在代码之上的某处,您可以定义按钮:
Button [] buttons = new Button[100];
Run Code Online (Sandbox Code Playgroud)
它们的标准Click事件如下所示:
private void myClick(object sender, EventArgs e)
{
}
Run Code Online (Sandbox Code Playgroud)
通常你这样绑定它:
for (int i = 0; i < 100; i++)
buttons[i].Click += myClick;
Run Code Online (Sandbox Code Playgroud)
但我希望事件处理程序采用以下形式:
private void myClick(int Index)
{
}
Run Code Online (Sandbox Code Playgroud)
如何使用/不使用临时功能将点击事件绑定到上述功能?
我想过使用委托,Func<T, TResult>表示法,或以某种方式传递自定义EventArgs,其中包含单击按钮的索引; 但由于缺乏足够的C#知识,我没有成功.
如果你们中的任何人建议在其标签中保存每个控件的索引:是的,这是可能的,但我不想出于某种原因使用它,因为如果你有一个类抛出一些事件但是没有标签属性或东西,这种方式是没用的.