C#,自然的进步
|
源代码网推荐随着 Visual J++ 的隐退,Microsoft 引入 C# 来填补这一空白 Michael L. Perry Microsoft 对因特网的新视野与当今在线内容的网络相去甚远。Microsoft 预见未来的因特网是一个由不同的人用不同的语言在不同的硬件平台上开发出的互相关联的服务,可以被运行在不同的因特网操作系统之上。 该公司为大胆设想的这个新世界所提供的就是 .Net 平台。实际上,.Net 并不是传统意义上的平台;它并不是一种公共的硬件或软件系统。.Net 实际上是一个协议集合,它允许因特网应用程序利用运行在不同机器上的不同服务。 Microsoft 新战略的结果就是下一代的 Microsoft Visual Studio 将有重新设计的语言,尤其是能支持 .Net 平台。Java 将不再此程序包中,Visual J++ 也不会再有新的版本。不要担心,Microsoft 将推出一个新的语言 C# 来填补这一空白。该公司动用了其最好的资源,包括星级语言专家 Anders Hejlsberg,来开发 C#。 非他莫属:Anders Hejlsberg,语言体系结构设计师 作为 Borland 的首席体系结构设计师,Hejlsberg 秘密地将 Turbo Pascal 变成一种面向对象的、拥有真正可视化的环境和卓越的数据库访问特性的应用程序开发语言。曾经被吹捧为“VB 杀手”的 Delphi 依然是 Borland(现在为 Inprise/Borland)的拳头产品。 Microsoft 用丰厚的薪水、股票认购权和巨额的加盟奖金雇请了 Hejlsberg 之后,Borland 曾提出通过不正当手段吸收新成员的控告。Borland 还曾声称 — 提供了很少的细节来支持指控 — Hejlsberg 正在开发“Delphi for Java”。这场诉讼最终以 Borland 的胜利而收场;但是从那时起,Microsoft 已在让 Hejlsberg 工作了。 Hejlsberg 充实了 Microsoft 的 Java 产品;其中格外引人注意的是,为了跟上其他 Visual Studio 语言的现行版本号,他人为地在一个发行版中将其版本号从 1.1 提升到 6.0。实际上,这个版本号的跳跃并未夸大 6.0 与其前一版本之间的差别。Hejlsberg 添加的功能已使该语言变成一种强大的 Windows 应用程序开发平台。添加的功能包括对 Windows API 的访问;因此,利用这些新功能的程序不再具有可移植性。 Hejlsberg 对 Microsoft 的 Java 产品的更改促使 Sun 控告 Microsoft 违反了 Java 许可协议。Sun 声称,Visual J++ 语言扩展没有保持 Java 的平台中立性,而是将开发人员锁定在 Microsoft 平台上。尽管 Microsoft 的 Visual J++ 事实上是最好的 Java 编译器,并且该公司的虚拟器(执行 Java 字节码的运行期模块)是最快的一种虚拟机,但 Sun 的诉讼已有效地阻止了 Microsoft 在 Java 舞台中的竞争。 Microsoft 的反应是完全从 Java 中退出来,并用一种新的基础因特网平台 — .Net — 和一种新的旗帜语言 — C# 来取代它。Anders Hejlsberg 是完成后一工作的自然选择。 证明一种新编程语言的合理性 快速应用程序开发:Microsoft 为 C# 制定的最重要的目标之一就是支持 RAD。因特网应用程序必须以因特网节奏开发;一种新语言必须易于学习和调试,而且必须生成易于更新的代码。虽然 Delphi 和 VB 在这些方面很出色,但 C++ 却没有这么成功。语言本身复杂而难以掌握,而且很少有有用的 C++ 库提供简单的接口。此外,C++ 的手动内存管理和复杂的类型转换模型使它难以调试。 跨平台部署:根据定义,因特网语言应该支持跨平台的部署。因为因特网是不同系统的一个网络,所以必须将服务部署到各式各样的硬件和软件上。 此外,客户端软件应该能够运行在多种类型的设备上,包括 PDA 和蜂窝式便携无线电话。 这种灵活性事实上是对除 Java 之外的所有语言的一种挑战。VB 尤其只能生成在基于 Intel 微处理器的机器上运行的 Windows 应用程序。Delphi 也受到同样的限制。Delphi for Linux 不久就会发布,但它也不支持因特网设备。VB 和 Delphi 都不符合跨平台部署的目标。
虽然这四个目标对于一种新语言是相当高的,但 Hejlsberg 在工作中已拿出自己最好的经验来确保 C# 实现这些目标。结果是产生了一种语言,这种语言从 Java 和 Delphi 中借鉴东西与从 C 和 C++ 借鉴的东西一样多(如果没有超过的话)。请注意,下面的信息基于 C# 操作规程,可能不准确代表最终的产品发行版。 C# 是一种 RAD 环境 C# 提供 Java 风格的垃圾收集:C# 提供的最重要的 RAD 功能之一就是 Java 风格的垃圾收集。在运行时的任意时间内,所有没有引用的对象会自动删除。通过将开发人员从手动内存管理任务中解放出来,垃圾收集使程序开发变得容易且不易出错。但是,自动垃圾收集是耗时的,并且是不可预知的。因此,C# 允许开发人员在要求实时性能的情况下局部禁用垃圾收集 — 通过将代码标记为 unsafe。
C# 接口是独立于类来声明的:C# 也支持类似 Java 和 Delphi 的接口模型,接口是独立于类来声明的。这与 C++ 模型是对立的,在 C++ 中接口实际上就是抽象基类。接口和类都可以继承多个接口。而类可以继承一个基类,接口根本不能继承类。这种模型避免了 C++ 的多继承问题,C++ 中不同基类中的实现可能出现冲突。因此也不再需要诸如虚拟继承和显式作用域这类复杂机制。C# 的简化接口模型有助于加快应用程序的开发。
C# 使用 Java 的简单线程同步机制。要在 C# 中实现线程同步,开发人员只须对关键的代码块作标志即可。 Java 开发人员使用 synchronized 关键字,而 C# 开发人员使用 lock。隐藏的互斥块将带有标志的代码块包装起来,在任一时刻只允许一个线程执行这段代码。除了关键字不同之外,这一机制在 C# 和 Java 中是完全相同的。因为线程所有编程任务最容易出错的一种,对同步进行简化的任何特性都有助于快速应用程序开发。
另一方面,命名冲突可能是不可避免的;尤其是当基类和导出类由不同的程序员(可能为不同的公司工作)实现时更是不可避免。在这种情况下,编译器将发出一个警告,并将导出类的方法视为一个新声明,而不将其视为重载。 另一方面,如果程序员有意让导出类中的一个新方法与基类中的某个虚方法同名,则他(或她)可以使用 new 关键字来阻止编译器发出警告。 C# 的其他特性 跨平台部署:C# 以 Java 解决这一问题的相同方式解决了跨平台部署的问题。C# 编译器生成由 .Net 运行时解释的字节码流。运行时组件的工作方式与 Java 虚拟机十分类似;应用程序可以部署到已安装了 .Net 运行时的任何设备上。
随编译器提供的另一个属性库将 C# 类和函数包装为 Web 服务。Web 服务是可在因特网上通过交互协议(如 SOAP)调用的托管软件模块。SOAP 将方法调用与它们的参数和返回值一起包装在 XML 数据包中。Web 服务可用许多语言编写,并可部署到许多硬件和软件平台上。而且,不同类型的 Web 服务可以协作组成整个 Web 应用程序。通过使用正确的属性,程序员很容易将任何 C# 类或函数转换为 Web 服务。 C# 不具备的特性 作用域和非关联化操作符:C# 不使用 C++ 作用域操作符 (::);而是依赖于 Delphi 和 Java 中类似的点操作符 (.)。此外,因为它基于前面说明的 Java 和 Delphi 风格的值/引用类型系统,在大多数情况下 C# 不使用 C++ 的非关联化访问符 (->),而是再次实现了点操作符。虽然重载的点操作符可能使刚开始学习 C# 的 C++ 程序员感到迷惑,但这对 Java 和 Delphi 开发人员来说是相当熟悉的。
模板:与 Java 和 Delphi 一样,C# 没有模板。因此,C# 没有支持声明类型安全的集合的机制。每个类最终都是从共同的基类 object 导出的。一般集合类必须是一个 object 集合,需要将它的成员不安全地下溯类型转换为所需的类型。 在这个过渡时期,最好学习 Java 或 Delphi。不仅因为这两种语言将使您更好地理解 C#,而且因为这两种语言本身也是非常有用的语言。作为软件专业人员,我们应该利用可获得的最好的工具。 作者简介 |
