这个简单的课
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#的直接转换。或者,如果您想要一个漂亮的原始视图,请切换到IL并直接阅读。