奇怪的反编译代码来自generics类中的事件订阅代码

这个简单的课程

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

获取编译为this(我使用Reflector进行反编译):

 public class Test { [CompilerGenerated] private sealed class c__DisplayClass1 { public Window wb; public void 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如果从未使用c__DisplayClass1生成? 这是一个Reflector错误吗?

编辑:事实上,在这种情况下,似乎Reflector优化并不是很好,禁用优化反编译代码是有道理的:

 public class Test { public Test() { base..ctor(); return; } public static void A(Window wa, Window wb) { c__DisplayClass1 CS$8__locals2; CS$8__locals2 = new c__DisplayClass1(); CS$8__locals2.wb = wb; wa.Closed += new EventHandler(CS$8__locals2.b__0); return; } [CompilerGenerated] private sealed class c__DisplayClass1 { // Fields public Window wb; public c__DisplayClass1() { base..ctor(); return; } public void b__0(object s, EventArgs e) { this.wb.Close(); return; } } } 

Reflector正在“优化”输出,试图想出C#可能看起来像什么。 我不知道“基础”位来自哪里,不可否认……但是生成的类肯定会被使用。

将Reflector选项设置为“unoptimised”,你会看到更像是IL到C#的直接转换。 或者只是切换到IL并直接读取它,如果你想要一个漂亮的原始视图。