第7版 和vb.net vb60与vbnet( 二 )


出现巨大变化的是语意,从运行于基于COM的deterministic, reference-counted的引擎之上的编程环境,转变为全面面向对象的基于.NET Framework的语言 。.NET Framework包括了CLR (使用通用垃圾收集机制和JIT编译引擎的虚拟机)和大量的类库 。VB开发者进入VB.NET要面对新增的大量类库的问题,虽然这在VS 2005的My 功能中已有所阐述 。
上述变化表明了许多在运行及维护相关优化事宜下面的假定,一些VB6函数和库不再存在而其它的仍然可用,但是比不上.NET语言中自带的可替换的函数和库来得高效 。即使它们可被编译 , 但大多从VB6转换而来的应用将需要一定程度上的重构(refactoring),以全面利用新语言的优点 。在有关句法、应用调试、部署和术语等方面的变化,有大量的文档可以参考 。
1, 比较样例:
两个例子都弹出"Hello,World"并带OK按钮的信息框,它们显示了VB和VB.Net在句法上的相似 。
VB:
Private Sub Command1_Click()
MsgBox "Hello, World"
End Sub
VB.NET:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MessageBox.Show("Hello, World")
End Sub
注意,VB.NET中的所有过程调用都必须加圆括号,而VB6中只有调用函数或者VB6中使用Call来调用过程时
才需要加圆括号,
另外,Command1和Button1并非必须,只是VB和VB.NET系统自动默认的控件名 。
两个例子都卸载活动窗口 , 它们显示了VB和VB.Net在句法上的不同 。
VB:
Private Sub cmdClose_Click()
Unload Me
End Sub
VB.NET:
Private Sub cmdClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdClose.Click
Me.Close()
End Sub
2, 争议:许多资深的VB程序员抱怨VB.NET,因为VB.NET 2002丢掉了许多不再发行的VB6中使用的大量语言constructs和用户界面功能,并且对保留下来的东西也改变了语意 。例如,在VB.NET参数默认是以值方式传递的,而不是以引用方式 。VB.NET 2002被半嘲讽半认真地称为Visual Fred或VBDOTNOT 。作为对2005-03-08微软拒绝为VB6再提供维护与支持的回应 , 当月月底出现了反对者的请愿(petition)
VB.NET的支持者们认为新语言在很多方面比旧版本更为强大 , 比如它以相比早期版本更为自然、紧密和完全的方式地加入了现代面向对象的编程范式 。反对者们有不同意见,虽然VB6对对象模型支持有缺点,但是二次开发升级到VB.NET 的成本比升级后的收益要高得多 。而开发软件发布因特网版本的独立程序员也对VB.NET的RunTime尺寸过大不满 。
相对编译成机器码的语言 , 编译成MSIL的语言包括VB.NET比较容易被反编译 。
微软提供了VB到VB.NET的自动转换器,虽几经改进,但仍无法转换全部代码,几乎所有非小型程序都需要人工修改以完成编译 。为了运行优化,大多程序需要大量工作去重构 。
主要是进行演算的VB程序自然会更容易升迁,但是采用了以下功能 , 如数据库支持,图形,unmanaged operations,或者在安装启用明细方面都很麻烦 。不幸的是,这些恰好是许多商业应用的核心 。
另外,Win98及其以上的系统就自带了VB6的运行时(RunTime)库 , 而VB.NET需要安装大得多的.NET Framework 。除了 Windows Vista, Windows XP Media Center Edition, Windows XP Tablet PC Edition and Windows Server 2003有自带.NET Framework,其它版本需要另外安装,这对用户和程序员都不方便 。
针对开发者的不满,微软主要做了如下努力:使新的开发更容易启动 , 而把已开发的VB6代码升级到VB.NET 。他们的最新成果可以从这里看到: , 那里文章和源码例子主要包括:完成VB6中的常见任务如打印预览;整合VB6和VB.NET解决方案(dubbed VB Fusion),从VB6 代码转换到 VB.NET 。

推荐阅读