我工作过的许多公司在选择VB.NET作为他们的核心开发工具时都经历了一个长时间的抉择,他们所关心的最主要的问题之一是如果他们不使用C#语言就不能开发出纯.NET框架代码。主要有两个原因使他们得出这样的结论:首先,由于VB(6.0或早期版本)运行时的限制,VB在开发COM构件的能力方面不如C语言功能强大,他们关心这些限制是否在.NET中依旧存在;再者,由于微软提倡将C#作为在.NET平台上的主要开发工具,很多VB开发者怀疑微软是否已经在VB.NET改进了VB先前版本的功能。
有个客户曾经跟我提起过这个问题,还特意请求我帮助他的公司在不依赖VB6中的任何功能时如何使用VB.NET作为纯.NET开发语言。当我问他为什么他认为VB.NET不是纯.NET开发语言时,他告诉我他最近将一个项目从VB6升级到VB.NET时,他在VB.NET中看到有很多象Imports Microsoft.VisualBasic和Imports Microsoft.VisualBasic.Compatibilit的输入语句,这些语句表明了VB.NET依旧在使用早期VB版本的一些功能;他说“如果VB.NET是.NET环境中一流的开发语言,为什幺还要用到早先VB版本中的功能呢?”。为了回答他的这个问题,并且给VB.NET的开发者提供一个如何使用这些包的建议,我将在此文章中解释为什么微软还在.NET平台中实现VB早期版本的中的一些功能的原因。
VB中的核心动态链接库(DLL)
将核心VB语言建造到.NET框架的方式同C#一样,主要的区别是微软为VB的开发者将两个附加的库增加到.NET中。首先,Microsoft.VisualBasic是.NET中可重新分发包的一个重要组成部分,它是VB早期版本的功能在.NET中的一个实现,同时两者也有一些细微的差别。实际上,有些VB函数(尤其是类型转换部分的函数)比.NET的通用语言运行时(CLR)所提供的对象有着更好的性能。例如,使用CInt()就比使用Convert对象要好;另外,有些VB函数替你做了一些额外的工作,例如,函数CStr()在转换字符串时也自动进行了区域性方面的处理,如果你用Convert对象就必须自己做这些额外的工作。
同时.NET中的库也提供了VB开发者原来经常使用的一些通用环境常量,例如,vbCrLf回车换行符。其实如果你不想使用原来的老式常量,你能使用System.Environment.Newline方法或System.Convert.ToChar(13)&System.Convert.ToChar(10)来得到同样的常量。象vbCrLf这样的常量引用在.NET中直接被映像到框架底层的调用,所以在性能方面应该没有什么影响。像上面这种情况,编译器将它优化成单个字符串,如果它是一个变量,它就直接被映像到\r\n,将它翻译成一个回车换行符。VB早期版本的函数也直接被映像到.NET框架底层的调用,象msgbox语句直接映像成.NET框架中的MessageBox,这种情况由于两者编译完了以后生成的中间语言(IL)基本上是相同的,所以在性能方面几乎没有什么影响。
在VB早期版本中的有些特性,象函数InputBox、控制数组和对ADO的支持在.NET框架中的没有直接的等同物。但是对于这些不能直接支持的特性,微软提供了另外一个名为Microsoft.VisualBasic.Compatibility的库,这个库是为使VS.NET具有向下兼容性而提供的,所以如果你的VB应用程序没有升级一定不要使用其中的功能。Microsoft.VisualBasic.Compatibility包含对控制数组、环境函数和字体转换的支持。微软所提供的另外一个名为Microsoft.VisualBasic.Compatibility.Data库可以支持ADO对象、接口和方法,使用这个库可以象早期VB版本中的ADO一样来操纵数据库。关于是否应该花费时间和精力来学习这些老版本中的功能,你应该留意一下VS.NET帮助文件的警告信息。
“警告:当你用Visual Basic.NET开发.NET应用程序时,最好不要使用VisualBasic.Compatibility命名空间中所提供的功能,将来的VB版本可能不再支持此命名空间,使用.NET中别的命名空间所提供的相同功能的函数和对象。”
由此可见,在使用VB.NET时,你应该注意可以使用VB早期版本中的那些功能,不可以使用那些功能,不可使用的部分.NET中别的包中都提供了相同的功能。清楚这些以后,这样你既可以使用VB早期版本中的一些功能,又可以开发纯.NET应用程序。所以,你大可不必为创建纯.NET应用程序放弃在VB上的多年的培训投资和实践经验而使用C#,因为VB.NET同样可以利用.NET框架提供给C#的所有功能。实际上,我曾经向我的客户推荐不要使用微软提供的升级向导,因为该向导在升级过程中会将.NET中所提供的向下兼容的库增加到.NET项目中,所以应该直接构造.NET应用程序,然后将原来应用程序中的代码移植到新应用程序中,用.NET新的功能替代不被.NET支持的老式功能,这样开发出的应用程序将是纯.NET应用程序。
Microsoft.VisualBasic支持纯.NET应用程序
Microsoft VisualBasic是VB语言自身在.NET框架中的实现,它所提供的功能是真正基于.NET的,而不仅仅是为了与VB早期版本的兼容。在VS.NET项目中的那些关于Microsoft.VisualBasic的Imports语句不会在性能方面造成什么影响,主要作用是当你用到相关功能后,它会告之编译器在什么地方可以找到调用的代码。
.NET框架会长期保留Microsoft.VisualBasic包,并且总是可以被重新发布。正如VB.NET产品组的一个成员所说,“你并不能因为删除Microsoft.VisualBasic.dll而获得什么,这个动态链接库中的功能并不是VB早期版本所遗留下来的,它们在VB.NET中已经被重新实现了,并且被VB的开发者所熟知,具有向前兼容性,所以使用它不会对应用程序有什么危害。最后,如果你重用VB例子中的代码,你也会用到这些功能。删除这个动态链接库并不能使你开发更纯的.NET应用程序,你只是丢失了一些对你有用的类罢了。”
(责任编辑 火凤凰 sunsj@51cto.com TEL:(010)68476636-8007)
|
|||
| · 51CTO主编推荐经典专题 · RAID——磁盘阵列基础 · 充电计划之热门IT认证.. · 51CTO技术自测 挑战自.. · CISSP认证成长之路 · AMD Phenom三核处理器.. · 国际文档格式标准开战 · 2007年互联网大会 |
· 我是黑客我怕谁——讲.. · ARP攻击防范与解决方案 · Solaris 10 配置管理 · Solaris基础知识入门 · RIP路由协议专栏 · MPLS路由协议专栏 · OSPF路由协议专栏 · 思科路由器产品 |
||
|
|||
| · Java基础教程 · VPN技术 · ARP攻击防范与解决方案 · SQL Server 2005全解 · SOA 面向服务架构 · SQL Server 2005全解 · Java编程开发手册 · RAID——磁盘阵列基础 |
· 三层交换技术专题 · SQL Server入门到精通 · Windows Server 2003企.. · Windows远程桌面应用 · C#技术开发指南 · VPN技术 · Solaris 10 配置管理 · C#技术开发指南 |
||
|
|||
| · ARP攻击防范与解决方案 · VPN技术 · SQL Server 2005全解 · Java基础教程 · SQL Server入门到精通 · SQL Server 2005全解 · SOA 面向服务架构 · Java编程开发手册 |
· C#技术开发指南 · 三层交换技术专题 · C#技术开发指南 · Windows远程桌面应用 · RAID——磁盘阵列基础 · Windows Server 2003企.. · 邮件服务器专题 · wimax技术与趋势 |
||
| ·DB2 Viper快速入门 ·DB2 9数据库的镜像分割与.. |
·将XML应用程序从DB2 8.x.. ·DB2 9中的pureXML:如何.. |
| ·服务器中的“傻瓜机”在.. ·盖茨也喜欢登录Youtube看.. |
· · |
| ·拯救系统管理员 ·美国选民:我为什么选布什 |
·VMware公司中文命名挑战赛 ·我们真缺乏创新吗? |
| ·J0ker的CISSP之路:复习-.. ·J0ker的CISSP之路:复习-I.. |
·9月第3周安全回顾 内网安.. ·教你几招识别和防御Web网.. |
| · NGN:下一代网络 · 网络访问中断大排查 · FTTx光纤接入 |
· 教你使用Anti ARP Sniff.. · 网络嗅探教程:使用Snif.. · 常见病毒手工清除方法大.. |
| · C++是垃圾语言?! · 2007年IT界七大抄袭事件 · Java实用开发全集 |
· 解析Ajax开发框架 走进A.. · 基于Google Maps与Ajax.. · 基于Google Maps与Ajax.. |
| · 热门 IT 培训认证官方资.. · Ubuntu 中文开源频道 · Solaris基础知识入门 |
· 费力不讨好 数据中心主.. · AMD Phenom三核处理器解.. · 51CTO主编推荐经典专题 |
| · 甲骨文Oracle 11g正式发.. · Oracle数据库开发之PL/S.. · Oracle数据库开发基础教.. |
· 存储2006,一个并购的大.. · IDC宣布浪潮蝉联存储市.. · 双机热备技术 |