如果我有一个没有操作的方法但返回传入的参数,编译器会将其从生成的MSIL中删除吗?
例如:
public partial class StringResource {
/// <summary>About</summary>
public static string About { get { return Encode(Resources.WebUI.About); } }
public static string Encode(string s) { return s; }
}
C#编译器是否会生成Encode
方法?如何查看生成的IL并使用Encode
方法比较代码?
如果静态编译器没有删除它,那么运行时JIT编译器呢?
答案 0 :(得分:2)
如果我有一个没有操作的方法但返回传入的参数,编译器会将其从生成的MSIL中删除吗?
没有。它不可能 - 这将破坏任何试图通过反射调用该方法等等。
JIT可能无法将该方法内联到任何内容,但这是另一回事。有各种各样的东西决定了方法是否可以内联,并且这些细节在CLR的不同版本,不同的进程架构等之间有所不同。对于空方法,我希望它们被内联(当不在调试器中运行时)用于< em>非虚拟电话。
如何查看生成的IL并使用Encode方法比较代码?
ildasm Foo.dll /out=after.il
before.il
和after.il