摘自 计算机世界报 2005年09月12日 第35期 C9
本文作者介绍了几款实现C#和VB.net项目之间相互转换的工具的安装和使用方法,以及它们各自的优点和缺点。
也许你需要把你以前的VB.net项目迁移到C#,或者与此相反,不是每个.net程序员都同时精通C#和VB.net。也许你需要读懂用VB.net写的示例代码或者共享的源码,但是你又恰好只熟悉C#,这时候你就需要一种转换软件来帮助你快速、准确地完成你的工作。
以下分别对目前流行的几种转换软件列出了安装、使用的方法,以及它们各自的优点和缺点,希望能帮助读者更快地找到自己需要的软件,并尽快部署、使用,解决工作中的问题。
VB.net转换为C#
1. VB.net to C# Converter(下载地址:http://www.vbconversions.com/)
VB.net to C# Converter是一款离线转换软件,安装简单,提供试用版,而且试用版永不过期,但是试用版只能翻译不超过600行源码的工程。VB.net to C# Converter将用户的VB.net项目用C#语言重新编写,同时变量名、注释行都被保留下来。它具有完备的功能,提供专业的报告生成工具,而且能够对转换过程中的错误生成错误记录,并且在此基础上提供错误分析和提供修改建议。总之,它是一款充分为使用者考虑的,功能完备的转换工具。
它提供多种类型工程的转换,包括Windows Forms 工程、Console 工程、Windows Control 库、Web Control 库、Web Services工程、Windows Service 工程。提供多种形式的转换,包括单一工程、多个工程、交互式代码转换、命令行形式转换。大多数的VB 函数都能转换为相应的 C# 功能,而且注解等也能得到很好的转换。可以使用向导,并提供在线帮助。转换准确率高达99%。
但是,它不支持中文,中文注解会生成乱码。完整版需要购买。
2.在线VB.net程序转换为C#
在线转换的网址是http://www.developerfusion.co.uk/utilities/convertvbtocsharp.aspx。使用方便,而且免费。只是目前正在试用阶段,转换后程序错误较多,并且在转换后的代码里不包含注释,这是因为转换后的代码在返回之前,首先被翻译为抽象树,而目前的这种树状结构把注释都忽略了。
C#转换为VB.net
1. C# to VB.NET Translator实现单个文件的转换
这是一个使用Web Services的在线解决方案,转换界面已经简单的不能再简单了。你要做的只是把你的 C#代码拷贝、粘贴到输入框中然后点击翻译(Translate)按钮。它可以免费使用,但必须在线转换(网址是http://authors.aspalliance.com/aldotnet/examples/translate.aspx)。现在,它还不能处理标签(tags)或者任何HTML,所以你的C#代码必须是纯的C#。并且,它只能转换一个文件,不能转换整个目录。
2.使用Web Services代理实现整个目录中文件的转换
基于以上的Web Services,XML for ASP.NET Developers提供了可以实现整个目录转换的解决方案,你可以在下面网址看到它的示例代码和解决方案:http://www.xmlforasp.net/codeSection.aspx?csID=44。这种转换方式可以免费使用,并能转换整个目录。XML for ASP.NET Developers 上的解决方案实际还是调用C# to VB.net Translator的Web Services,只是扩展了C# to VB.net Translator的功能,但是部署要麻烦许多,需要自己建立工程,并添加引用。
为了方便大家更好地理解XML for ASP.NET Developers的解决方案,在这里对解决方案的实现步骤做进一步阐述。其具体步骤如下:
● 新建一个asp.net Web 服务的C#工程ConvertC。
● 在工程中添加Web引用http://authors.aspalliance.com/aldotnet/examples/csharptovbtranslator.asmx?WSDL。该引用自动命名为com.aspalliance.authors.
●在该工程根目录下添加CsharpFiles文件夹,将需要转换的C#文件另存为.txt文本文件放到文件夹下。
●添加新的Web窗体ConvertCtoVb.aspx,在该窗体中添加id为CSharptoVBCon-verterFrm的form。
● 双击ConvertCtoVb.aspx生成ConvertCtoVb.aspx.cs 文件。该文件首先要实例化Web引用com.aspalliance.authors中的CSharpToVBTranslator类,并取得id为CSharptoVBCon-verterFrm的 form作为代码容器,然后对CSharpFiles文件夹中的每个文件分别读取需要转换的代码,调用该Web Service中的TranslateCSharpToVB( )方法进行转换,最后输出转换后的代码到页面的form代码容器。
● 设置ConvertCtoVb.aspx为初始文件,运行该工程,CsharpFiles文件夹下的所有文件就可以从c#转换到vb.net了。
3.使用C# to VB.net Converter
该软件下载地址是http://csharpconverter.claritycon.com/。该软件提供在线和离线两种方式实现C# to VB.net的转换,而且离线版安装简单,使用方便。但在某些情况下转换不太准确,其实这些情况在其他一些转换工具中也普遍存在。这就需要我们了解一些C#和VB.net之间的差别,下面就列出了几种需要手动修改的情况。需要注意的是,这些情况也是我们在使用别的转换软件实现自动转换后,应该重点检查的部分。
● C#中引用比较和值的比较都使用“==” 关键字,而VB.net 使用“is”关键字做引用比较,使用“=”来做值的比较,所以当C#程序中使用“==”来做引用比较时会出现转换错误。修改方法是:转换后,所有的引用比较中都用 “is”替换 “=”。
● C#中字符连接符和加法运算符都使用“+”,所以当C#中使用“+”作为字符连接符时将引起C#中的字符连接符“+”不能正确的转换为VB.net中的字符连接符“&”。修改方法是:转换后,手动修改字符连接符“+”为“&”。
● 因为VB.net是大小写不敏感的,C#转换后可能出现重名。修改方法是:手动修改成恰当的惟一名字。
● 注释有时不能加载到正确位置。修改方法是:手动把注释调整到正确位置。
手工转换
以上提到的是使用工具实现C#和VB.net之间的转换,但是在时间和工作量允许的情况下,你也可以完全通过手动修改实现C#和VB.net之间的相互转换。当然这样做的好处是明显的,首先你可以全面了解两种语言的语法和构造的差别,并可以通过一门语言学习另外一门语言。其次,也可以有效地避免上面提到的转换软件在特定情况下可能产生的错误。因为,虽然我们可以使用自动化工具实现转换,提高我们的工作效率,但至今却还没有一种工具能够实现100%的无差错转换。因为,大多数的转换软件都是基于字面和语法的转换,而不是基于程序逻辑的转换,所以程序转换过程中就可能因为程序逻辑不被理解而发生如前面提到过的错误,因此使用自动化工具转换后我们还是要进行测试和少量修改的,同时了解一定的C#和VB.net的语法和它们之间的差别对我们还是很有好处的。如果采用手工转换,那么C#和VB.net之间的语法对照表可能对你有用,可以参考以下网址:http://www.harding.edu/USER/fmccown/WWW/vbnet_csharp_comparison.html。
(用了下,效果还好,单个单元转化还不错,但VB.NET to C#转换有很多明显的错误,
如
IList List;
List(index) --> 转为List(index)而不是List[index]
ToString,ToLower,GetNextEntry
不会转化为加()
)
=========================================================
1.http://www.kamalpatel.net/(最常用的,不过对于16进制的Int不能正常转换)
在线版:VB.Net => C# C#=>VB.Net
离线版:C#=>VB.Net
2.http://csharpconverter.claritycon.com/(推荐!非常好用的一个,几乎没出过太大的问题。)
在线版:C#=>VB.Net
离线版:C#=>VB.Net
3.http://www.ragingsmurf.com/
在线版:C#=>VB.Net
4.http://aspalliance.com/
在线版:C#=>VB.Net
5.http://developerfusion.com/
在线版:VB.Net => C# C#=>VB.Net
(转:http://happy555.cnblogs.com/archive/2005/07/05/186745.html)