有时我需要将一段代码或整个项目从 VB.NET 转换为 C#,反之亦然。不幸的是,由于内在的语言差异,有时无法自动完成代码转换。例如,我指的是诸如在 C# 中可用而在 VB.NET 中不可用的关键字,或者在 VB.NET 而在 C# 中不可用的XML Literals。
那么我的问题是,您是否在编写 .NET 项目时考虑过源代码的可移植性,或者您是否充分利用了语言特性?
有时我需要将一段代码或整个项目从 VB.NET 转换为 C#,反之亦然。不幸的是,由于内在的语言差异,有时无法自动完成代码转换。例如,我指的是诸如在 C# 中可用而在 VB.NET 中不可用的关键字,或者在 VB.NET 而在 C# 中不可用的XML Literals。
那么我的问题是,您是否在编写 .NET 项目时考虑过源代码的可移植性,或者您是否充分利用了语言特性?
为什么要转换语言?考虑到它们远不止两种 .NET 语言,而且有些非常不同,例如 F#。
为正确的工作使用正确的语言。在 .NET 中,很多时候都是 C# 或 VB,但在其他方面(包括 C++/CLI 和 F#)有很多更容易的事情。
当然,在一个项目中甚至可以在同一个程序集中使用多种语言(尽管 VS 不直接支持)。
我总是用 C# 编写代码,我讨厌 VB 语法和冗长。我发现 C# 更精确和简洁,可能是因为我来自 C/C++ 世界。
但是,我从未遇到过将项目从语言转换为另一种语言所需的问题。不要忘记,用 C# 或 VB.NET(或其他任何东西)编写的已编译的 .NET 程序集可用于每个 .NET 项目。
我永远不会考虑限制我对一种语言的使用,只是因为有一天我想把它移植到另一种语言。这会降低我的工作效率,并意味着对不太可能的未来进行投资。
对于 .NET 语言,我尤其不会这样做,因为 .NET 程序集是可互换的。
如果我事先知道我必须移植我的代码,我会直接用我需要移植到的语言编写它。
每次都充分利用。我尝试确保程序集中的公共类型保持 CLS 兼容,但仅此而已。我倾向于留在 C# 领域,但 VB 已经(或曾经)更好地支持后期绑定的 COM,并且 C++/CLI 在与非常笨拙的 c++ 库进行互操作时是必不可少的。
如果您根据语言的功能而不是语法选择语言,我认为您不太可能改变。
我认为编写可移植的 .NET 代码没有任何意义,因为您可以将其链接起来,因此99% 的时间移植到另一种 .NET 语言是没有意义的。只需提取代码,使其成为 DLL 并链接它。
我尝试充分利用语言特性。所有其他事情都是愚蠢的(在我的书中)。我的工作是以最好的方式使用我的工具来完成工作。在我作为程序员的 20 年里,我没有任何需要将我的任何程序转换为另一种语言(仅从同一语言的不同版本升级)。
现在,当 C# 和 VB.Net 如此容易相互移植时,也许它会改变。我知道我经常将 C#-examples/project 转换为 VB.net,因为 C# 中有更多有趣的示例。
我充分利用了语言特定的功能。当很容易从 c# 、 f# 或其他 clr 语言调用 vb 程序集时,我真的发现在语言之间移植的能力并不是很重要。
我真的不明白为什么当你不打算使用它们给你的功能时你甚至会费心使用不同的语言。如果您只使用 VB.Net 中可用的功能,为什么要切换到 C#?
在大型项目中,通常不需要支持源代码可移植性,因为组件封装了功能(重用)。您需要的一切都是程序集上的 CLSCompliant 属性。
如果您需要将一段代码从一种语言转换为另一种语言,您可以使用方案“Language1 => IL => Language2”。反射器是执行此操作的好工具。