background image

 

五、公共运行时环境
迄今为止,业界对 VB.NET 讨论得最多的特色或许就是 CLR。VB.NET 运行在 CLR 之上,
正是 CLR 为 VB.NET 带来了许多关键的新特色(包括缺点在内)。例如, CLR 使得
VB.NET 支持跨语言的继承以及自由线程。
在 VB6 中,分布式 VB 程序要求有 VB 运行时库 msvbvm60.dll 支持,即该运行时库必须
随同应用一起分发。其他许多语言,比如 C++和 Java,也有类似的要求。在.NET 中,所有
Visual Studio 语言共享同样的运行时环境 CLR。改用 CLR 带来了几个重要的结果:现在所
有 Visual Studio 语言都共用同样的 IDE、同样的窗体引擎、同样的异常处理机制,等等。它
意味着 Visual Basic 在很大程度上已经可以和.NET 的其他语言相提并论,如 C#等。然而,
对于 CLR 的异议仍旧存在,VB 业界仍在激励地争辩它地价值。
不管应用是用 VB、C#还是其他.NET 语言编写,所有 VS.NET 代码都是编译成中间语言
(Intermediate Language,IL)。当应用运行时,一个实时编译器(just-in-time compiler,
或称为 JIT)就把 IL 代码编译成机器语言。在理论上,它意味着为非 Windows 的平台构造.
NET 运行环境是可能的,但目前还没有出现有关这类系统的正式消息。IL 有一个缺点:
正如 VB 在 5.0 以前的版本,IL 代码对于类似的反向编译工程很敏感。由于存在这种可能
性,许多开发者对于.NET 框架的整体安全性抱有怀疑。
对 CLR 进行优化影响 IL 层次上的代码,它使得所有使用 CLR 的语言受益。然而,对于特
定语言的优化涉及到如何把代码编译成 IL 代码,它根据特定语言的语法进行。因
此,.NET 各种语言之间存在一定的性能差异是必然的。但不管如何,从整体上来看这仍
旧是好事,例如 CLR 为 VB 带来了和 C#

——

一样的调试和分析工具

之所以能够如此,是

因为它们都使用一样的工具。
CLR 提供了前所未有的跨语言集成能力,其中包括跨语言继承代码的能力。所有使用
CLR 的语言都使用一个公共类型系统(Common Type System),它使得开发那些运用多
种语言的应用变得更为容易。
在 CLR

之内运行的代码称为 受管理的代码 (Managed Code),受管理代码所使用的内

存由 CLR 全面控制。受管理的代码有着许多优点,包括交叉语言集成、跨语言异常控制以
及一个组件交互的简化模型。Visual Basic.NET 只能以受管理代码方式运行,与此相对应,
C#却具有将代码转入非受管理方式运行的能力(运行在 CLR 之外),比如执行指针处理
之类的操作。这是 VB.NET 不能与 C#相提并论的地方之一。然而,这种能力的是否重要,

 

对于不同的人、不同的用途来说都有所不同。