2011-03-14 16 views
5

当我构建我的.NET应用程序时,程序集将包含什么内容? CIL? 第二个问题,当在不同的.NET langugaes中做同样的事情时,CIL在相似性方面完全相同还是相同,其工作方式完全相同? 谢谢VB.NET和C#CIL看起来是一样的吗?

回答

6

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

+0

我会克制自己,如果我见过'“” =无“'代码 – msarchet

+0

@msarchet:在VB.Net,他们认为是相等的 – SLaks

+1

我知道它被认为是平等的,它只是看起来错误 – msarchet

2

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

1

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

然而,任何一种语言的结构都有不同的解决方法,或者仅仅是不可能的。这永远不会导致相同的说明。

1

基于.net的所有语言都编译为ILCode(Intermidiate Language)。如果完成相同,得到的ILCode将相同,例如,对象上的成员访问将始终是相同的。但是,有些功能在其他语言中没有表示形式,因此可能无法使用该语言表示ILCode,因为它使用的语言不具备该功能。虽然引用程序集仍然是可能的。

1

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

然而,编译器是如何实现你的代码的,由于VB和C#使用不同的编译器,所以不能保证它们将你的代码实现为相同的IL。

1

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

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

相关问题