【发布时间】:2014-03-28 17:02:49
【问题描述】:
我刚刚阅读了 MSDN,发现这里需要任何建议。
http://msdn.microsoft.com/en-us/library/0yw3tz5k.aspx
在创建委托时,对外部变量 n 的引用被称为捕获。与局部变量不同,已捕获变量的生命周期会延长,直到引用匿名方法的委托有资格进行垃圾回收。
“捕获”是否意味着它将按值复制? 但是我尝试编写如下示例程序:
class Program
{
class async_class
{
private int n = 0;
public async_class()
{
for (int i = 0; i <= 9; i++)
{
System.Console.WriteLine("Outer n={0} address={1}", n, n.GetHashCode());
System.Threading.Thread thread1 = new System.Threading.Thread( () =>
{
System.Console.WriteLine("Inner after n={0} address={1}", ++n, n.GetHashCode());
});
thread1.Start();
//n = 10;
}
}
}
static void Main(string[] args)
{
async_class class1 = new async_class();
}
}
}
在此示例中,内部“++n”将写回原始外部“n”。所以结果会是。
外n=0地址=0
外部 n=0 地址=0
n=1 后内地址=1
外部 n=1 地址=1
谁能解释更多关于“captured”外部变量的细节?
【问题讨论】: