C#编译器优化 - 未使用的方法

Yoc*_*mer 17 c# compiler-construction optimization visual-studio-2010 visual-studio-2008

C#编译器(在VS2008或VS2010中)是否在编译时删除未使用的方法?

我认为决定是否使用公共方法可能有问题,所以我猜它会编译所有的公共方法.

但是在类中从未使用的私有方法呢?

编辑:

是否存在关于编译器optmization的一系列规则,这些规则记录在任何地方?

Jor*_*dão 23

只需使用发布版本检入反射器.编译器不会删除未使用的私有方法.

有一些方法可以使用没有编译器知识的方法,比如反射.所以编译器不会尝试猜测.它只是将方法留在那里.

编译器删除的唯一私有方法是没有实现的部分方法.

对于C#编译器优化,请查看此处.


Eil*_*aee 8

编译器不会从程序集中删除任何方法,公共或私有.实际上,我可以通过反射引起奇怪的问题,并阻止对这些方法的运行时调用.

有许多框架(比如XAML解析器),它使您能够在没有静态绑定的情况下调用私有方法(在XAML文件中考虑OnClick ="myFunction")当引发OnClick事件时,此标记将调用可能的私有myFunction. ..但是编译器在编译时没有关于这种行为的信息.

动态代码也遇到同样的问题,也就是IL生成.并且您可以在完全信任下执行时从任何对象访问私有方法.