这个简单的课

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并直接阅读。

10-01 06:10