VB.NET和C#CIL看起来一样吗?

时间:2011-03-14 14:52:14

标签: c# .net cil

当我构建我的.NET应用程序时,程序集包含什么? CIL? 第二个问题,当在不同的.NET语言中做同样的事情时,CIL在相似性方面是否完全相同或完全相同? 感谢

6 个答案:

答案 0 :(得分:6)

不,他们不会是一样的。
VB.Net使用Microsoft.VisualBasic.dll中的辅助方法而不是许多IL指令来实现VB语义。
这包括平等("" = Nothing),某些字符串操作,我不记得还有什么。

答案 1 :(得分:2)

你不能保证VB.Net和C#会归结为相同的IL,但如果你编写了功能相同的例程,IL可以产生相同的结果。

答案 2 :(得分:1)

对于许多方法,编译结果(CIL)将是相同的。

然而,在任何一种语言中都有不同解决方案的构造,或者只是不可能。这永远不会产生相同的指示。

答案 3 :(得分:1)

所有基于.net的语言都编译为ILCode(Intermidiate Language)。如果完成相同的结果ILCode将是相同的,因此,例如,对象上的成员访问将始终是相同的。但是,有些功能在其他语言中没有表示,因此ILCode可能无法用该语言表示,因为它使用了该语言中没有的功能。尽管如此,仍然可以参考装配。

答案 4 :(得分:1)

如果代码以相同的方式工作,那么除非编译器错误,否则可以保证生成的IL将以相同的方式工作。

但是,编译器如何实现代码,而VB和C#使用不同的编译器,并不能保证他们将代码实现为相同的IL。

答案 5 :(得分:1)

1)是的,所有.NET应用程序都编译为 CIL

2),不,IL在不同的.NET语言之间看起来并不总是一模一样。对于类似的源代码构造,它们可能类似,但是每种语言在实现方式方面都有细微差别,因此IL最终看起来略有不同(但通常表现得相对类似)。