4
這個簡單的類奇怪的反編譯的代碼認購代碼泛型類
public class Test<T>
{
public static void A(Window wa, Window wb)
{
wa.Closed += (s, e) => wb.Close();
}
}
被編譯到這個(我使用反射來編譯):
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 bug嗎?
編輯: 的確,好像在這種情況下,反射器優化不沃金非常好,禁用優化的反編譯的代碼是有道理的:
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;
}
}
}
這是一個很好的問題。我明白爲什麼你需要幫助類來捕獲'wb'上的閉包,但我不明白'A'中實際生成的代碼,它似乎沒有使用助手。 – 2010-07-01 15:05:22