匿名方法用在事件中的奇怪用法,高手解释下

hongyelzg 2007-01-07 02:15:12
void init()
{
int i=0;
this.Click+=delegate(object sender,EventArgs)
{
MessageBox.Show(i.ToString());
};
}
在这个事件中可以访问i的值,看似本来就可以,但是这个是个事件该如果理解,
...全文
151 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
greenery 2007-01-07
  • 打赏
  • 举报
回复
引用:MSDN

匿名方法的参数的范围是 anonymous-method-block。

在目标在块外部的匿名方法块内使用跳转语句(如 goto、break 或 continue)是错误的。在目标在块内部的匿名方法块外部使用跳转语句(如 goto、break 或 continue)也是错误的。

如果局部变量和参数的范围包含匿名方法声明,则该局部变量和参数称为该匿名方法的外部变量或捕获变量。例如,下面代码段中的 n 即是一个外部变量:

int n = 0;
Del d = delegate() { System.Console.WriteLine("Copy #:{0}", ++n); };



与局部变量不同,外部变量的生命周期一直持续到引用该匿名方法的委托符合垃圾回收的条件为止。对 n 的引用是在创建该委托时捕获的。

匿名方法不能访问外部范围的 ref 或 out 参数。

在 anonymous-method-block 中不能访问任何不安全代码。


这个是比较特殊,局部变量的生命周期因为匿名方法而改变了。哈哈。

111,112

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧