假设您使用.NET编写了一个用C#,VB编写的应用程序 当你点击构建时,它真的编译你的代码吗?我一直这么想,直到我开始在我的一些装配上使用redgates反射器并逐字地看到我的代码。我本来期望循环被展开和另外多次优化,而不是什么。
那么编译何时实际发生?我认为当它构建时,代码变成IL(中介语言),并且当执行时,它正在加载到CLR中?它是仅在CLR期间进行优化而从未在构建时进行优化的吗?
答案 0 :(得分:22)
在VS中编译时
执行时:
我也在这里发布答案,因为另一个问题并不是真的这个......
答案 1 :(得分:4)
在编译时编译到IL。 Reflector的神奇之处在于它“理解”IL并将其转换回c#(或VB.NET或其他任何内容。在Reflector的Options菜单下查看,您可以以任何格式查看程序集,包括IL)。
在Reflector中,您实际上没有看到原始代码。您正在看到IL转换为c#。大部分时间与您所写的内容非常相似,但有一些明显的迹象 - 例如,找到您实施auto-property的地方:
string MyProperty {get;set;}
你会看到实际编译的内容,就像这样:
public string MyProperty
{
[CompilerGenerated]
get
{
return this.<MyProperty>k__BackingField;
}
[CompilerGenerated]
set
{
this.<MyProperty>k__BackingField = value;
}
}