gpt4 book ai didi

c# - 来自泛型类中事件订阅代码的奇怪反编译代​​码

转载 作者:行者123 更新时间:2023-11-30 12:53:01 25 4
gpt4 key购买 nike

这个简单的类

public class Test<T>
{
public static void A(Window wa, Window wb)
{
wa.Closed += (s, e) => wb.Close();
}
}

编译成这样(我正在使用 Reflector 反编译):

public class Test<T>
{
[CompilerGenerated]
private sealed class <>c__DisplayClass1
{
public Window wb;

public void <A>b__0(object s, EventArgs e)
{
this.wb.Close();
}
}

public static void A(Window wa, Window wb)
{
wa.Closed += delegate(object s, EventArgs e)
{
base.wb.Close();
};
}
}

base 是什么意思? ?为什么是<>c__DisplayClass1如果从未使用过会生成?这是 Reflector 错误吗?

编辑:确实,似乎 Reflector 优化在这种情况下效果不佳,禁用反编译代码的优化是有意义的:

public class Test<T>
{
public Test()
{
base..ctor();
return;
}

public static void A(Window wa, Window wb)
{
<>c__DisplayClass1<T> CS$<>8__locals2;
CS$<>8__locals2 = new <>c__DisplayClass1<T>();
CS$<>8__locals2.wb = wb;
wa.Closed += new EventHandler(CS$<>8__locals2.<A>b__0);
return;
}

[CompilerGenerated]
private sealed class <>c__DisplayClass1
{
// Fields
public Window wb;

public <>c__DisplayClass1()
{
base..ctor();
return;
}

public void <A>b__0(object s, EventArgs e)
{
this.wb.Close();
return;
}
}
}

最佳答案

Reflector 正在“优化”输出以尝试得出 C# 可能的样子。诚然,我不知道“基础”位是从哪里来的……但是生成的类肯定被使用了。

将 Reflector 选项设置为“未优化”,您会看到更像是 IL 到 C# 的直接转换。或者,如果您想要一个非常原始的 View ,只需切换到 IL 并直接阅读它。

关于c# - 来自泛型类中事件订阅代码的奇怪反编译代​​码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3159026/

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