如果将.NET语言编译为CIL,.NET语言选择是否重要?

Bar*_*rim 3 .net

如果所有.NET语言都编译成CIL,那是否意味着它背后的语言(VB.NET,C#等)并不重要?或者编译过程是否在语言之间区别对待代码?有明显的差异吗?

Dar*_*rov 9

如果所有.NET语言都编译成CIL,那是否意味着它背后的语言(VB.NET,C#等)并不重要?

是的,这正是它的意思.无论您使用哪种语言,只要它当然符合CLS,CLR在运行时并不关心它吃MSIL.

不同的语言提供不同的语法,但在所有语言中,您应该能够实现相同的最终目标.C#和VB.NET是主要的.NET语言,您可以期待Microsoft(和StackOverflow :-))的大多数功能,进度和支持.显然,每种语言都有自己的做事方式.

但有一点需要注意:有些功能在MSIL中定义,但尚未在C#/ VB.NET中实现(尚未实现).例如,在MSIL中,您可以定义枚举或委托通用约束,但不能在高级语言中定义.乔恩在博客上写了这个有趣的特写.

至于你应该选择哪一个,确保你从不在这里提出这样的问题,或者它在关闭之前不可能存活1分钟.

  • 美味的MSIL早餐,午餐,晚餐和午夜小吃! (3认同)
  • @Andrew Barber,垃圾收集晚餐后的所有美味:-) (2认同)

Jon*_*eet 7

嗯,有语言之间的显着差异.

特别是,我相信C++/CLI有一些技巧,而C#/ VB没有(例如直接修改"盒子"内部值的能力),如果反过来也是如此,我也不会感到惊讶.

同样,不同的语言编译器可能会使用IL的不同方面 - 例如,F#编译器将使用tail.C#编译器不使用的前缀.(而且F#显然是与C#,C++/CLI和VB完全不同的语言.)

但最终,JIT编译器既不知道您使用的源语言也不知道.使用任何一种语言都可以使您的工作完成最可读和可维护性.这将取决于手头的任务以及所涉及的开发团队的经验和偏好.有些语言比其他语言更适合某些任务.例如,在C#4之前,VB使用COM API比使用C#更容易 - 但动态类型有助于平衡这里的竞争领域.C#将是实现LINQ到对象更好的选择,现在为C#有迭代器块,而VB没有什么可比性......只是还没有,但实际上将有更好的在未来版本的支持.