c# – 来自通用类中的事件订阅代码的奇怪反编译代??码
发布时间:2020-12-15 21:08:17 所属栏目:百科 来源:网络整理
导读:这个简单的课程 public class TestT{ public static void A(Window wa,Window wb) { wa.Closed += (s,e) = wb.Close(); }} 获取编译为this(我使用Reflector进行反编译): public class TestT{ [CompilerGenerated] private sealed class c__DisplayClass1 {
这个简单的课程
public class Test<T> { public static void A(Window wa,Window wb) { wa.Closed += (s,e) => wb.Close(); } } 获取编译为this(我使用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#可能看起来像什么.我不知道“基础”位来自哪里,不可否认……但生成的类肯定会被使用.
将Reflector选项设置为“unoptimised”,您将看到更像IL到C#直接转换的内容.或者只是切换到IL并直接读取它,如果你想要一个漂亮的原始视图. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |