gpt4 book ai didi

c# - 捕获的变量... 'Captured' 实际上代表什么?

转载 作者:太空狗 更新时间:2023-10-29 23:01:00 24 4
gpt4 key购买 nike

在“捕获变量”中如何捕获变量?

“捕获”一词实际上代表什么?

这是否意味着在不涉及装箱的情况下引用值类型?

谢谢

最佳答案

Captured Variables 一般是指用闭包(基本上是内联函数)捕获的变量。 “捕获”意味着内联函数必须“捕获”对外部函数中变量的引用。为此,C# 编译器生成一个内部类,并通过引用将外部变量传递给内部类(内联函数随后引用该内部类)。如果反汇编代码,您可以看到这一点。

考虑以下问题

void Main()
{
string s = "hello";
Action a = delegate
{
Debug.WriteLine(s);
};
s = "hello2";
a();
}

在上面的示例中,字符串变量 s 被内联操作 a 捕获。

在幕后,C# 编译器将创建一个内部类,其中 Action a 引用以捕获变量 s 的值。重要的是要注意字符串 s 是通过引用传递给 Action a 的,所以 Action 实际上会打印出“hello2”,而不是“hello”。如果没有清楚地理解,这可能会产生意想不到的副作用,称为“访问修改后的闭包”。

关于c# - 捕获的变量... 'Captured' 实际上代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12968092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com