gpt4 book ai didi

c# - MethodInvoker 如何访问其范围之外的成员?

转载 作者:行者123 更新时间:2023-11-30 21:14:09 26 4
gpt4 key购买 nike

public void SomeMethod()
{
List<string> someList = LoadList();
if(condition)
{
MethodInvoker invokeThis = delegate {
someList.Remove(0);
};
if(this.InvokeRequired)
{
this.invoke(invokeThis);
}
else
{
invokeThis();
}
}
}

我不明白的是 invokeThis 如何访问 someList。范围不应该仅限于委托(delegate) { .. };.

最佳答案

不,访问不应限于 delegate { ... } block 。这是匿名函数(匿名方法和 lambda 表达式)的很大一部分好处 - 它们能够捕获局部变量作为其环境的一部分。他们以这种方式实现 closures对于 C#。请注意,这些确实是变量 - 如果您更改委托(delegate)中的值,然后再次在方法的其余部分访问它,您将看到新值。该变量甚至可以在方法返回后继续存在,您甚至可以拥有一个局部变量的多个“实例”——每次逻辑上执行声明时都有一个。

参见 C# 4 spec 的第 7.15.5.1 节了解更多详情。

关于c# - MethodInvoker 如何访问其范围之外的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6428526/

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