1.2 什么是C#
C#(读作C Sharp)是一种强大的、面向对象的程序开发语言,是专门用于.NET的编程语言,用C#编写的代码总是在.NET Fra mework中运行。使用C#可以编写出传统的Windows桌面应用程序(Winforms)、Windows服务程序(Windows Service)、Internet应用程序(ASP.NET)、Web服务程序(Web Service)。因此,在当前的软件开发行业中,C#已经成了主流语言,可以说C#语言和Java语言在当今企业应用中已经各占半壁江山。
C#是专门为适应.NET框架而设计的,它支持.NET框架基础类库提供的每种功能。C#是一种完全面向对象的编程语言。在C#中使用的所有基本类型都看做是对象,在程序中即使是一个整型变量,也是当做对象来进行处理的。这与在C和C++中的情况是完全不同的。但是C#是从C和C++语言继承和发展而来的,借鉴了包括Java、Delphi、Visual Basic(以下简称VB)等在内的多种语言的优点。包括基本的流程控制语句、窗体设计思想、跨平台设计等。利用C#语言几乎可以完成C和C++语言能实现的所有功能,并且增强了程序的安全性。在C#中对指针的管理非常严格,只有在特别标识的代码块中才可以定义和使用指针,这样降低了内存溢出的风险,同时又兼顾了使用指针高效、灵活的特点。
1.2.1 C# 语言的优点
C#是专门为.NET应用而开发的语言,是与.NET框架的完美结合。在.NET类库的支持下,C#能够全面地体现.NET Framework的各种优点。C#具有以下突出的优点。
● C#是一种精确、简单、类型安全、面向对象的语言。正是由于C#面向对象的卓越设计,使它成为构建各种应用程序组件的理想之选——无论是高级的商业对象,还是系统级的应用程序。
● C#具有生成持久系统级组件的能力,提供COM+或其他技术平台支持,以集成现有代码;提供垃圾回收和类型安全,以实现应用程序的可靠性;提供内部代码信任机制,以保证应用程序的安全性。
● C#利用.NET Fra mework的通用类型系统能够与其他程序设计语言交互操作。C#应用程序能跨语言、跨平台互相调用,使用C#语言可实现不同专业技术背景的人员协同工作,完成软件系统的设计和开发。
● C#支持MSMQ(微软消息队列)服务、COM+组件服务、XML Web服务和 .NET Framework。使用C#,一方面实现了组件之间的相互调用,即实现不同软件技术开发的组件之间的集成应用;另一方面能够把传统的组件转换为XML Web服务,实现组件之间跨互联网的调用。
● C#语言允许自定义数据类型,以扩展元数据,这些元数据可以应用于任何对象。项目构建者可以定义领域特有的属性,并把它们应用于任何语言元素——类、接口等,然后开发人员可以编程检查每个元素的属性。这样,很多工作都变得方便多了,如编写一个小工具,自动检查每个类或接口是否被正确定义为某个抽象商业对象的一部分,或者只是创建一份基于对象的领域特有属性的报表。定制的元数据和程序代码之间的紧密对应有助于加强程序的预期行为和实际实现之间的对应关系。
● C#增强了开发效率,同时也致力于消除编程中可能导致严重结果的错误。C#使C/C++程序员可以快速进行网络开发,同时也保持了开发者所需要的强大性和灵活性。
1.2.2 C# 语言的特点
作为一种被广泛应用于计算机程序开发的语言,C#具备很多优越的性能特点。在本节中,将具体讨论这些特点的本质及实际意义。
1.简单性
C#的发展与成型都借鉴了C/C++的很多特点,然而与C或者C++相比,C#最突出的特点就在于其语法结构更简单。由于大部分的重复性代码都被封装在了.NET Framework的基类中,所以用C#开发应用程序的操作要简单很多。
相信大多数具有程序开发经验的人都知道,C++是一种强大的面向对象的计算机语言。在使用C++时,程序员最害怕的就是指针,没错,正是由于有了从C语言时代继承而来的功能强大的指针,才使得C++脱颖而出。可是也正是由于指针的存在,令C++变得复杂而危险,危机四伏。
在C#中,没有了指针。默认情况下,用户对代码的操作被限定在了一种受控的环境中,C#本身不允许进行直接存取内存等不安全的操作。
除了取消指针以外,.NET平台下的C#语言无时无刻不体现着简约之美。
2.类型统一性
除了简单性以外,C#还具备了类型的统一性。C#的类型系统是统一的,所有的类型变量及值都可以作为对象(object)处理。实际上,这与C#本身的类型设计原理有很直接的关系。C#中每一个类型都可以理解为最终继承自object类,这就意味着object是所有类型最终的基类。正是有了这一特性,使得C#中无论是值类型还是引用类型,都可以被当做统一系统类型来对待。
3.面向对象性
对于程序员而言,从Smalltalk开始,面向对象的话题就始终围绕在所有现代程序设计语言周围。此后,一种新语言不支持面向对象的功能是不可想象的。C#支持所有关键的面向对象的理论与概念,并且C#具有面向对象语言所应具备的一切特性,能实现封装、继承与多态性。然而,作为一门彻底的面向对象的语言,C#比之前的C++或者Java具备更加完备、合理的面向对象结构,可以满足各种层次规模的开发需求。
C#的面向对象性拥有其自身的一些特点。作为一门独创的新型语言,C#的类模型是建立在.NET虚拟对象系统(Visual Object System,VOS)的基础之上的,这就使得它的面向对象性得到了升华。正是由于C#的对象模型仅是.NET Fra mework基础架构的一部分,而不再是其本身的组成部分,因而降低了以往面向对象语言中所存在的面向过程性。
4.类型安全性
语言的安全性是衡量一种语言是否优秀的重要标准。即使是最熟练的程序员也会犯错误,谁都不能避免可能会忘记变量的初始化,也许会不小心对不属于自己管理范围的内存空间进行修改等,这些错误常常会产生难以预见的后果。一旦这样的软件投入使用,人们将会投入巨大的代价来寻找与改正这些简单错误,这将给用户带来巨大损失。
C#的先进设计思想可以消除软件开发过程中的许多常见错误,并提供了包括类型安全在内的完整的安全性能。为了减少开发中的错误,C#在.NET Framework的帮助下可以令开发者通过更少的代码完成相同的功能。
C#对于安全性的控制主要体现在以下几方面:
● 利用.NET运行时可以控制代码访问的安全特性。
● 在C#中变量类型是安全的。
● 在C#中类型转换是安全的。
● 在C#中数组类型进行越界检查。
● 编译器会提醒未经初始化而被使用的局部变量。
● C#语言检查类型溢出。
所有的这些都确保了C#的类型安全性得到很好的控制。.NET平台提供的垃圾收集器(Garbage C ollection,GC)将负责资源的释放与对象撤销时的内存清理工作,这些工作都是自动执行的,不再需要程序员亲自指定或者排除。所有这些都大大提高了C#语言的安全性。
5.兼容性
一种新语言的出现,总是要考虑对之前的技术体系是否兼容的问题。这里必须提到风靡全球的另一种语言——Java。它在出现伊始就彻底背弃了之前处于统治地位的COM技术体系,尽管Java语言得到了用户的认可,然而时至今日它仍然很难瓦解Visual C++(以下简称VC)、VB和Delphi等阵营。或许正因为如此,促使它只能在此之外的其他技术和市场领域扎根。
.NET Framework实现了对以往几乎所有主流技术的兼容。可以看到,越来越多的VC、VB、Delphi的程序员转到了VC.NET、VB.NET和Delphi.NET。作为.NET Framework的首推语言和最具特色的独创语言,C#在简化语法的同时,不仅没有失去灵活性,并且在很大程度上保持了对外界技术的兼容。
C#的兼容性主要体现在以下几方面:
● C#提供对COM和基于Windows应用程序的原始的支持。
● C#在特定环境下允许有限制地使用原始指针。
● C#允许用户使用指针来操作C++的代码,但前提是必须声明是不安全的。
● C#类库中已经内建unkown和其他COM界面,用户不再需要显式地实现这些功能。
● .NET Fra mework平台下的所有中间代码语言中的组件(如VB.NET等)可以在C#中直接使用。