这个简单的课程
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
?
这是反射器错误吗?
编辑: 事实上,在这种情况下,反射器优化似乎并没有很好地发挥作用,禁用反编译代码的优化是有意义的:
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# 可能的样子。诚然,我不知道“基础”位来自哪里......但是生成的类is肯定正在使用。
将 Reflector 选项设置为“未优化”,您将看到更像是 IL 到 C# 直接转换的内容。或者,如果您想要一个漂亮的原始视图,只需切换到 IL 并直接阅读它。