gpt4 book ai didi

c# - 在方法调用之间缓存了哪些(如果有的话)本地定义的委托(delegate)?

转载 作者:太空狗 更新时间:2023-10-29 21:07:39 24 4
gpt4 key购买 nike

这在我的另一个问题中提到过,我认为将其添加到记录中可能会有用。在以下程序中,哪些本地定义的委托(delegate)(如果有)在调用 Work 方法之间被缓存,而不是每次都从头开始创建?

namespace Example
{
class Dummy
{
public int age;
}

class Program
{
private int field = 10;

static void Main(string[] args)
{
var p = new Program();

while (true)
{
p.Work();
}
}

void Work()
{
int local = 20;

Action a1 = () => Console.WriteLine(field);
Action a2 = () => Console.WriteLine(local);
Action a3 = () => Console.WriteLine(this.ToString());
Action a4 = () => Console.WriteLine(default(int));
Func<Dummy, Dummy, bool> dummyAgeMatch = (l, r) => l.age == r.age;

a1.Invoke();
a2.Invoke();
a3.Invoke();
a4.Invoke();
dummyAgeMatch.Invoke(new Dummy() { age = 1 }, new Dummy(){ age = 2 });
}
}
}

最佳答案

根据 Reflector 显示的内容,最后两个(a4dummyAgeMatch)由 MS C#3.0 编译器缓存(在名为“CS$<>9_CachedAnonymousMethodDelegate5 的字段中) ”和“CS$<>9_CachedAnonymousMethodDelegate6”在我的特定构建中)。

这些可以被缓存,而显然其他的依赖于捕获的变量。

我不认为该行为是规范强制要求的,但 Mono 编译器的行为方式大致相同(使用不同的变量名)。

关于c# - 在方法调用之间缓存了哪些(如果有的话)本地定义的委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/446483/

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