1.1 C#语言简介
1.1.1 C#的优势
作为编程语言,C#是简单的、完全面向对象的且是类型安全的语言。最重要的是,它是一种现代编程语言。在类、名字空间、方法重载和异常处理等方面,C#去掉了 C++中的许多复杂性,借鉴和修改了Java的许多特性,使其更加易于使用,不易出错。
下面列举了C#在设计上较其他语言的优势。
1.简单性
C#在设计上的首要目标就是简单性。没有指针是 C#的一个显著特性。在默认情况下,用户使用一种可操控的代码进行工作时,一些不安全的操作,如直接地进行内存存取,将是不允许的。
在 C#中,不再需要记住那些源于不同处理器结构的数据类型,C#在 CLR 层面统一了它们,使得基于.NET 平台上的不同语言拥有相同的数据类型。我们可以将每种类型看作一个对象,不管它是初始数据类型还是完全的类。
整型和布尔型是完全不同的,这意味着 if 判别式的结果只能是布尔型,如果是别的类型,编译器则会报错。混淆比较和赋值运算的错误将不会再发生。
2.现代性
许多在传统语言中必须由用户自己来实现或者没有的特性,都成为 C#语言中的基础部分。增加的金融类型对于企业级编程语言来说是很受欢迎的一个附加类型,用户可以使用一个新的decimal类型进行货币计算。
3.高度面向对象
C#语言面向对象的程度比 Java 还要高,除了支持面向对象的所有概念:封装、继承和多态外,还增加了委托、事件、集合、泛型等诸多新概念,并且整个 C#的对象模型是建立在.NET 虚拟对象系统(VOS,Virtual Object System)之上的,是基础架构的一部分,而不仅仅是编程语言的特性。
C#中没有孤立的全局函数、变量或常数。每个对象都必须封装在一个类中,要么作为一个实例成员(通过类的实例对象访问),要么作为一个静态成员(通过类型来访问),这使用户的代码具有更好的可读性,同时减少了发生命名冲突的可能。
多重继承的优劣一直是面向对象领域争论最多的话题之一,因此 C#只允许继承一个基类,如果需要多重继承,可以使用接口。
4.类型安全性
C#实施了最严格的类型安全机制来保护它自身及其垃圾收集器。因此,程序员必须遵守关于变量的一些规定,比如不能使用未初始化的变量,否则编译器将会警告用户;对于对象的成员变量,编译器负责将它们置零;当数组实际上只有n-1个元素时,不可能访问到它“额外”的元素 n,这使重写未经分配的内存成为不可能。C#允许在应用级或语句级检查算术运算操作中的溢出,当溢出发生时会出现一个异常。此外,C#中传递的引用参数都是类型安全的。
5.版本处理
动态链接库 DLL(Dynamic Link Library)是一种被编译为二进制代码的函数库,在程序运行时才被调入内存执行,而不是在编译时链接到可执行程序内部,这样就在二进制级别实现了代码共享,而不必在每个应用程序中编译一个副本,如果 DLL中的代码更新了,只需替换相应的 DLL 文件即可。然而,这也带来了 DLL 版本的问题,不同版本的 DLL 可能与调用程序不兼容,同一版本的 DLL 也不能同时为不同的调用程序服务,造成应用程序出现无法预料的错误,于是不得不更换文件名来保存同一 DLL 的多个版本——这种混乱的状态被称为“DLL 地狱”。不过令人欣慰的是,C#提供了一种版本处理机制,使得程序员可以确保当他开发的类库升级时,会与已有的应用保持二进制级别上的兼容。
1.1.2 .NET框架
.NET 框架(.NET Framework)可以建立.NET 应用程序。使用.NET 开发的程序需要在.NET Framework下才能运行。.NET Framework体系结构主要包括下列五大部分:
(1)程序设计语言及公共语言规范(CLS);
(2)应用程序平台(ASP.NET及Windows应用程序等);
(3)ADO.NET及类库;
(4)公共语言运行时(CLR);
(5)程序开发环境(Visual Studio)。
.NET框架的体系结构如图1.1所示。构建在Windows操作系统之上的是公共语言运行时(CLR),其作用是负责执行程序,提供内存管理、线程管理、安全管理、异常处理、通用类型系统与生命周期监控等核心服务。在CLR之上的是基类库,提供许多类与接口。
图1.1 .NET框架结构
.NET Framework类库是以命名空间(Namespace)方式来组织的,命名空间与类库的关系就像文件系统中的目录与文件的关系一样,如用于处理文件的类属于System.IO命名空间。
在.NET Framework基础上的应用程序主要包括ASP.NET 应用程序和Windows Forms应用程序,其中ASP.NET应用程序又包含了“Web Forms”和“Web Service”,它们组成了全新的Internet应用程序;而Windows Forms则是传统的窗口应用程序。
在.NET Framework 之上,无论采用哪种语言编写的程序,都先被编译成中间语言 IL,IL经过再次编译后才生成机器码,完成 IL 到机器码编译任务的是 JIT(Just In Time)编译器。上述处理过程如图1.2所示。
图1.2 .NET应用程序的编译过程
随着.NET 技术的不断发展,.NET Framework 的发展也经历了几个阶段,从早期的.NET Framework 1.0/1.1发展到2.0、3.0、3.5,功能越来越强。2010年,随着Microsoft推出Visual Studio 2010,.NET Framework的版本又由3.5 升级为4.0。
.NET Framework 4.0 在.NET Framework 3.5 的基础上进行了扩展,增加了很多新特性(WCF,WPF,WF,LINQ和 AJAX 等),使.NET 技术更加强大和成熟。在利用 Visual Studio 2010进行项目开发的时候,可以根据所要使用的特性选择所采用的.NET Framework版本,实现与早期版本的兼容。