首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

【初学者求解惑】关于委托的执行结果的困惑

2012-08-30 
【菜鸟求解惑】关于委托的执行结果的困惑本来写了一个测试例子,向测试下多播委托的执行顺序的,没想到在执行

【菜鸟求解惑】关于委托的执行结果的困惑
本来写了一个测试例子,向测试下多播委托的执行顺序的,没想到在执行过程中出现了另一个问题,
先上代码,测试代码如下:

C# code
static void Main(string[] args)        {            Action funcTemp = null;            int i =1;            for (; i <= 20; i++)            {                funcTemp += delegate()                {                    int temp = i;                    Console.WriteLine("--> " + temp.ToString());                };                Console.Write(i + "_");//在这里输出的i的值正常。            }            Console.WriteLine("\n--> 按任意键继续......");            Console.ReadKey();            Console.WriteLine("--> Begin <--");            funcTemp();//在执行委托的时候出问题了。            Console.WriteLine("-->  End  <--");            Console.ReadKey();        }


执行结果截图:


委托执行了20次,但是每次的输出结果却都是 21 ,

我想得到的结果本来是 1 到 20 的,只这样呢??

我以前曾经看到过一个贴字说可能是因为闭包的原因,造成这样的错误,但是当时看的时候也没在意,现在再找那个帖子的时候却找不到了,请好心人 帮我解释一下,还有应该怎么改正呢??



[解决办法]
将 声明临时变量 放到委托外面
C# code
for (; i <= 20; i++)            {[color=#FF0000] int temp = i;[/color]                funcTemp += delegate()                {                                       Console.WriteLine("--> " + temp.ToString());                };                Console.Write(i + "_");//在这里输出的i的值正常。            }
[解决办法]
探讨
能解释下原因吗??

[解决办法]
探讨

为什么啊,SP大哥,别只说一句啊。

我菜鸟,很多都不明白的.为什么私有变量 就可以了呢??

难道和他的生存周期有关?

如果和生存周期有关的话,那能不能具体的解释下呢?

引用:

引用:
能解释下原因吗??


必须使用私有变量(因为私有值),而不是共享一个变量。

[解决办法]
上边有个提到的"closure" 不知道是啥东西 
下面是给出的链接
The Beauty of Closures

热点排行