设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3694|回复: 1
打印 上一主题 下一主题

[首开纪录]细说VB.NET

[复制链接]
跳转到指定楼层
1#
发表于 2002-10-29 16:31:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
(作者:青苹果工作室编译 2001年03月07日 14:47)

  微软公司提出的.NET概念,正从各个方面渗入到我们的生活中。它将产生的作用,诚如一位业内名家所描述的:“请忘掉你认为你所知道的,.NET将改变一切”!既然如此,无论是IT业内人士、还是企业决策者,快速领会这个新概念的含义及深远影响,都显得非常必要。

概要
  VB正在不断地发展中,它具备了以前VB编程人员作梦都想拥有的性能,想象一下你将随心所欲的利用这些性能,是不是很令人激动?然而,这个计划于2001年第四季度上市销售的VB版本可能会给你带来些小麻烦,因为要完全掌握它需要一个较长的学习周期,而且其中包括了一些微妙的变化,你可能在使用他们的时候出现错误。

  需要准备的条件:建议获得Visual Basic.NET beta 版,这些内容对所有VB程序员都是有用的。

  Microsoft .NET平台的涵盖面很广,而且很难预测它的真正意义。我们注意到,现在有很多关于.NET的不正确的理解。因此在这篇文章里,我们将把给你一个VB.NET到底是些什么的概念,从头到尾说一说它是什么、它能干什么以及怎样才能充分发挥它的优点。我们要特别地细看一下IDE的改变、面向对象特征、底层结构的改变、一些“现代化”的语法以及包装和分发方面的增强。我们将讨论这些功能能为你做什么,解释他们的优点与不足。由于这些改变是如此之大,而且涉及方方面面,因此希望这一篇文章能满足你全部的要求是不现实的,要了解这方面全部的知识请参阅有关文章和书籍。

  Visual Basic.NET 和你现在所知的开发工具完全不同,并且这个新版本会改变你的未来。到底有多大不同?如果你觉得从VB3迁移到VB4是一个很大的变化,那这次VB.NET会让你感到震惊。这次升级与其说是VB的一个新版本,还不如说是迁移到一个新平台上,你所面临的情况就和从DOS迁移到Windows差不多。

VB获得了继承能力
  VB.NET预期拥有的第一新功能就是继承能力。继承是VB开发者长期以来要求得最多的功能。判断一下对继承的要求是不是像早些时候对本地化编译器的要求一样将是一件很有意思的事,后者,当Microsoft提供了一个以后,你就几乎听不到多少这方面的言语了。

  Visual Basic现在是真正的面向对象语言了。过去,你可以通过使用VB的界面继承性创建伪实现的对象继承,但现在不必这样做了。

  Visual Basic.NET 现在提供大量面向对象功能,包括应用程序继承,它允许你从其它类导出你想创建的类。像在其它面向对象语言里一样,你能覆盖基类的方法和属性,并且能实现多态以创建健壮的、扩展性好的组件。例如,假定你从基类 Crane里继承产生了一个ForkLift类,你能使用像下面的代码覆盖基类里对Lift方法的默认实现:

  Public Class ForkLift

   Inherits Crane

   Overrides Sub Lift(ByRef _

   Height As Double)

   Height = Height + 10

   End Sub

  End Class

  VB.NET不仅能让你覆盖方法或属性;它还能让你重载方法。重载是定义同名、但使用不同数据类型的方法或属性的能力。例如,假定你有一个组件能对不同数据类型的数组进行排序,你不需要三个(每种数据类型一个)不同名的方法;实际上你可以重载一个方法名:

  Overloads Sub SortArray(ByRef _

   aValues()As String)

  ...

  Overloads Sub SortArray(ByRef _

   aValues() As Integer)

  ...

  Overloads Sub SortArray(ByRef _

   aValues() As Object)

  另一个改变是:表单现在是类模块。这就是说类本身包含建立表单的所有“肥料”的代码。你可能想知道,为什么你不得不看到这些从前不用看的代码,但这个改变同时带来强大的新功能,包括继承这些表单的能力。Microsoft把这一技术称为可视化继承。假定你的对话框有一种标准的格式,例如在表单的一侧有一行按钮,并在角上有一个标识,那么,通过可视化继承你能创建一个表单模板(类),并从这个基类里导出所需的表单。

一切都是对象
  代码复用简化了开发过程,像实现和可视化继承这样的功能有利于更简单、更强大的代码复用。然而,代码复用并不是到此为止。你能通过支持VB.NET的通用语言运行库(Common Language Runtime - CLR)继承在其它 VS.NET 语言里定义的类。例如,你或别人创建了一个 C# 类,然后就能从 VB 里继承它。

  VB.NET 的面向对象能力扩展了语言本身的通路:一切都是对象。这意味着比在以前的 VB 版本里,你获得了更多的内在功能,你将很少被迫使用 Windows API。例如,在以前的 VB 版本里,你使用 LoadPicture 方法加载图片并使用表单的 Line 方法(或较快的 API) 画线。现在,你使用 System.Drawing 对象来创建并处理图形。你可以使用以下代码在表单上显示一幅图片:

  picshowpicture.Image = _

   system.Drawing.Image.FromFile( _

   "c:\test.bmp")

  注意 VB.NET 的“一切都是对象”方式让你的语句能用得更长久。

  考虑以下语句,它在一个图形对象上画一条黄绿色的线
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2002-10-29 23:16:00 | 只看该作者
WTM1兄发了第一篇“细说VB.NET(上)”,俺接发后两篇:
细说VB.NET(中)
(作者:青苹果工作室编译 2001年03月07日 14:47)

易于反编译的中间语言
  无论你用VB、C#或其它.NET语言编写应用程序,VS.NET代码都编译成为中间语言(IL)。当应用程序运行时,一个即时编译器(JITter)处理IL代码并把它编译成为机器语言。这意味着在理论上可能为Windows以外的平台创建.NET运行库,但现在关于类似的事情还没有任何官方消息。中间语言的一个缺陷是:它像VB5以前的VB版本一样,容易被反编译。这种可能性使许多开发者普遍地质疑.NET架构的安全性。

  CLR在IL层次内外影响代码,对它的修改将使所有使用CLR的语言受益。然而,语言只是和代码如何被解释为IL有关,对特定语言的优化可以根据特定语言的语法来编写,这样在技术上就可能使.NET语言之间的性能差别很小。不管怎样,大体上蓝图是美好的。例如,CLR使VB的调试和监测工具和C#的相应工具相当,它做到了这一点因为它们本来就是相同的工具。

  CLR提供不平行的跨语言集成,包括跨语言继承代码的能力。所有使用CLR的语言共享一个通用类型系统,它使使用多种语言开发应用程序变得更简单。我不喜欢把 C API 声明翻译成VB里可以使用的形式,所以我很赞赏通用类型系统带来的好处。

  在CLR中运行的代码被称为被管理代码,被管理代码使用的内存完全由CLR来控制。被管理代码带来很多好处,包括跨语言集成、跨语言异常处理和简化的部件相互作用模型。Visual Basic被限制为只能以被管理代码的方式工作,然而C#拥有跳到非被管理代码的能力(执行到运行库之外),并能做像指针操作这类事情。这是VB和C#不同等的情况之一。这种能力到底有多重要取决于你想干什么。

  CLR造成的体系结构差别要比跨语言集成、共享功能和被管理代码等深刻。首先,Visual Studio.NET的支撑结构不是 COM。另外,VB.NET里的所有东西,甚至字符串都是对象。因为这些和其它一些原因,Microsoft改变了支撑结构处理对象的方式。COM实现了一个引用计数方案,这样每次引用一个对象时,计数器递增。当一个对象引用超出作用域或被释放时,计数器递减,当引用计数减少到零时就终止这个对象。Microsoft声称在.NET架构下引用计数的开销太大,以至于不能在 .NET中实现它,所以它放弃了引用计数转而使用垃圾收集。

垃圾收集需要新体系结构
  CLR垃圾收集器主要是监视一个程序的资源,当可用资源达到确定的阈值时寻找无用的对象,并在发现它们的时候清除这些对象。垃圾收集的一大好处就是你不再需要担心大多数普通的循环引用,即子对象引用了父对象,然后父对象又引用了子对象。在引用计数方案下,循环引用使两个对象都不能被释放和清除。然而,垃圾收集器会发现循环引用并清除它们。这也意味着释放对象的最后一个引用时不再需要立即清除对象。

  垃圾收集的一个后果是:你再也不能指望一个类的 Terminate 事件能在适当的时机发出。实际上,如果线程被阻塞,可能根本就不会发出 Terminate 事件。和COM提供的确定化终止相反,它被称为不确定的终止。缺乏确定化终止,以及因为垃圾收集器重新安排并压缩内存从而不能使用指针的事实,在新闻组里激发了一波激烈的辩论。我想这些新限制可能会令你痛恨,因为你要依靠确定化终止;也可能你漠不关心,因为你不依赖 Terminate 事件。垃圾收集并不是万灵药,实现弱引用依然需要做一些考虑。

  从引用计数到垃圾收集只是 Visual Studio.NET 的支撑结构不是 COM 这个事实的表象之一。你能在VB.NET中使用COM对象,比如说ActiveX服务器或ActiveX控件。然而,你必须通过包装访问这些对象。任何时候听到“包装”这个术语,你应该明白你面对着性能损失,并且对象的行为可能有所不同。如果当计划移植一个使用了大量COM对象的工程,就需要认真地测试和计划,可能需要重新规划应用程序的结构才能移植成功。坦率地说,你要有遭受挫折的准备。还记得从VBX迁移到 OCX的过程吗?我记得,我的精神病医生也记得。我很快就要再去看他了 ;-)

  语言本身的变化要远远超过体系结构的变化。大部分改变确有道理,但我并不认为所有的改变都是如此。以前版本的VB允许你以很多方法来做很多事,以至于统一的编码标准要么不存在要么就很难强加于人。Microsoft对VB做了大量的改变为的就是“清晰”这种语言。很多情况下,原来你有好几种方法做一件事,现在就只有一种了。Billy Hollis 提供了语法变化的详细列表,包括废弃的关键字列表,但有些东西需要在这里重复一下。

  首先,向过程参数传递数据的默认方法由引用(ByRef)变成了传值(ByVal)。这个改变主要是因为引用要比传值的风险大得多。它的风险主要是调用过程中的数据可能被无意中篡改。你仍然能通过引用传递数据,但这一改变使你需要修改新的默认调用方法来使用引用。

Set语句消失了
  其次,Set 语句消失了。在 VB.NET 里如果你需要向变量传递一个对象引用,所需要的只是一个等号,对象被视为同其它值一样。这很酷,但也有副作用:默认属性消失了。例如,你不再能
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-27 23:58 , Processed in 0.097180 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表