编写.NET可移植代码或利用语言细节?

时间:2009-02-18 10:21:23

标签: .net language-features portability

有时我需要将一段代码或整个项目从VB.NET转换为C#或反之亦然。遗憾的是,由于内在的语言差异,有时无法自动完成代码转换。例如,我指的是C#中提供的 yield 等关键字,而不是VB.NET中的关键字,反之亦然 XML Literals ,而不是C#。

我的问题是,如果您在编写.NET项目时考虑过源代码的可移植性,或者您是否充分利用了特定于语言的内容?

8 个答案:

答案 0 :(得分:2)

为什么要转换语言?考虑到远远超过两种.NET语言,有些是非常不同的,例如F#。

使用正确的语言来完成合适的工作。在.NET中很多时候都是C#或VB,但在其他方面有很多东西比较容易(包括C ++ / CLI和F#)。

当然,可以在单个项目中使用多种语言,甚至可以在同一个程序集中使用(尽管VS不直接支持)。

答案 1 :(得分:1)

我总是用C#编写代码,我讨厌VB语法和冗长。我发现C#更精确和简洁,可能是因为我来自C / C ++世界。

但是,我从未遇到过将项目从语言转换为另一个项目所需的问题。不要忘记,在C#或VB.NET(或其他任何东西)中编译的已编译.NET程序集将可用于每个.NET项目。

答案 2 :(得分:1)

我绝不会考虑限制我使用某种语言,因为有一天我可能想把它移植到另一种语言。它会降低我的生产力,意味着对未来的投资不太可能。

对于.NET语言,我特别不这样做,因为.NET程序集是可互换的。

如果我事先知道我必须移植我的代码,我会直接用我需要移植它的语言来编写它。

答案 3 :(得分:1)

每次充分利用。我尝试确保程序集中的公共类型保持符合CLS,但这就是它的范围。我倾向于留在C#区域,但VB已经(或者有)更好地支持后期绑定的COM,并且在与非常笨拙的c ++库交互时C ++ / CLI是必不可少的。

如果您根据其功能选择语言,而不是语法,我认为您不太可能改变。

答案 4 :(得分:1)

我没有看到编写可移植.NET代码的观点,因为您可以将其链接起来,因此 99%的时间移植到另一种.NET语言是没有意义的。只需提取代码,使其成为DLL并链接它。

答案 5 :(得分:1)

我尝试充分利用语言细节。所有其他的事情都是愚蠢的(在我的书中)。我的工作是以最好的方式使用我的工具来完成工作。在我作为程序员的20年中,我没有必要将我的任何程序转换为另一种语言(仅从同一语言的不同版本升级)。

现在当C#和VB.Net很容易相互移植时,它可能会改变。我知道我经常将C#-examples / project转换为VB.net,因为C#中存在更多有趣的例子。

答案 6 :(得分:1)

我充分利用语言特定功能。当从c#,f#或其他clr语言调用vb程序集这么容易时,我真的觉得在语言之间移植的能力非常重要。

我真的不明白为什么当你不打算使用他们给你的功能时,你甚至会打扰使用不同的语言。如果您只使用VB.Net中提供的功能,为什么要切换到C#?

答案 7 :(得分:1)

在大型项目中,通常不需要支持源代码可移植性,因为组件封装了功能(重用)。您需要的一切都是CLSCompliant归因于程序集。

如果您需要将一段代码从一种语言转换为另一种语言,则可以使用方案“Language1 => IL => Language2”。反射器是做这件事的好工具。