收藏 分销(赏)

人力资源-C是微软NET开发人员的首选语言.docx

上传人:pc****0 文档编号:8460629 上传时间:2025-02-14 格式:DOCX 页数:6 大小:28.27KB
下载 相关 举报
人力资源-C是微软NET开发人员的首选语言.docx_第1页
第1页 / 共6页
人力资源-C是微软NET开发人员的首选语言.docx_第2页
第2页 / 共6页
人力资源-C是微软NET开发人员的首选语言.docx_第3页
第3页 / 共6页
人力资源-C是微软NET开发人员的首选语言.docx_第4页
第4页 / 共6页
人力资源-C是微软NET开发人员的首选语言.docx_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、1CHAPTERC#的起源C#是微软.NET开发人员的首选语言,它具有的新功能经受住了时间的考验,且始终位于科技前沿,为现代企业计算环境提供了一种可用性强的高效编程方法。无论从哪个角度看,C#都是21世纪最重要的编程语言之一。本章的目的是回顾C#发展的历程,包括:C#创建的原动力、设计理念以及它是如何受其他计算机语言影响的。本章也解释了C#和.NET Framework的相关性。正如您将看到的,C#语言和.NET Framework协同工作,一起构建了一个高度优雅的编程环境。1.1 C#的族谱计算机语言并不是凭空存在的,相反,它们彼此相关,新语言都或多或少地受到它之前的语言的影响。类似于异花授

2、粉的过程,一种语言的功能会被另一种语言沿用,但新的创新内容会被集成到现有的环境中,而陈旧的构造则会被消除。就这样,编程语言不断地进化,编程艺术也不断地完善。C#也不例外。C#继承了多种程序设计语言的精髓,它直接继承了当今最成功的两种计算机语言 C和C+语言的功能,并且与Java有紧密联系。理解它们之间的关系对于理解C#语言是很重要的,因此,我们将分析这三种语言的发展环境,以此来开始C#语言的研究。1.1.1 C语言:现代程序设计的开端C语言的创建标志着现代程序设计时代的开始,它是Dennis Ritchie于20世纪70年代在一台使用UNIX操作系统的DEC PDP-11机上创建的。尽管一些早

3、期的语言,最著名的如Pascal语言,已经取得了相当的成功,然而是C语言首先建立了面向过程编程的规范,至今仍适用。C语言成长于20世纪60年代的“结构化程序设计”变革。在结构化程序设计兴起之前,大型程序很难编写,因为程序逻辑容易混乱会呈现所谓的“无头绪的代码”,比如掺杂大量纷乱而难以跟踪的跳转、调用和返回。而结构化语言通过增加定义明确的控制语句、带有局部变量的子程序以及其他方法改进了这个局面。通过使用结构化的技术,程序变得更加组织良好和可靠,并且更易于管理。尽管当时也存在其他结构化语言,但C语言首先成功地集强大功能、优雅简洁和可表达性于一身。其简单易用的语法加上以程序员(而非程序语言)为本的设

4、计理念,很快赢得了众多程序员的拥护。这些在今天看来也许微不足道,但当时C语言确实为程序员带来了一股振奋人心的新鲜空气。自然地,C语言成了20世纪80年代应用最广泛的结构化程序设计语言。然而,C语言也有其局限性,其中最为麻烦的一种局限性是其不能够处理大型程序。一旦项目达到了一定的规模,使用C语言就会遇到障碍,并且C程序变得难以理解和维护。严格来讲,局限性具体取决于程序、程序员和他们所使用的工具,但是只要超出这种局限,C程序就会变得难以管理。1.1.2 OOP和C+语言的创建到20世纪70年代后期,许多项目的规模接近或达到了结构化程序设计方法和C语言所能承受的极限。为解决这个问题,新的编程方法开始

5、出现,该方法称为面向对象程序设计(object-oriented programming,OOP)。通过使用OOP,程序员能够处理更大型的程序。但当时最流行的语言,即C语言并不支持面向对象程序设计。开发面向对象版本的C语言的愿望最终导致了C+语言的诞生。C+是由Bjarne Stroustrup于1979年在新泽西州的Murray Hill的Bell实验室开发的。最初,他称这种新语言为“C with Classes”,1983年改名为C+。C+包含C语言的全部,因此,C语言是C+的基础。Stroustrup对C语言所做的绝大部分扩展都是为了支持面向对象程序设计。事实上,C+是C语言的面向对象版

6、本。通过创建基于C语言构建的C+语言,Stroustrup为程序员提供了一种将面向过程中的方法平滑移植到OOP中的方法。这样,C程序员在使用面向对象方法编程之前仅需要学习一些新功能,而不用去学习一门全新的语言。C+语言在20世纪80年代的大部分时间里慢慢得到应用,并取得了很大的发展。到了20世纪90年代初,C+语言逐渐成为主流,并大范围地普及。到了20世纪90年代末,C+已经成为应用最广泛的程序设计语言。目前,C+语言仍是开发高性能的系统级代码的优秀语言。C+语言的出现并不是试图要创建一种新的程序设计语言,而是对一种已经很成功的语言的增强,理解这一点很重要。总之,语言的发展是从一种已有的语言开

7、始,然后不断改进直至满足需求,这是亘古不变的道理。1.1.3 Internet和Java的出现程序设计语言的下一个主要进步是Java语言,它最初被称为Oak,是由Sun Microsystems公司在1991年开始使用的。Java的主要设计人员是James Gosling,Patrick Naughton、Chris Warth、Ed Frank和Mike Sheridan等人也参与了这项工作。Java是一种结构化的面向对象语言,它继承了C+的语法和设计理念。与其说Java语言创新方面的动力来自于程序设计艺术的进步(尽管从某种程度上是),不如说来自于计算机硬件环境的变化更确切。在Interne

8、t成为主流之前,大多数程序都是针对特定的CPU和操作系统而编写、编译和执行的。事实确实如此,但当人们能够很容易地把程序从一种环境移植到另一种环境,并且可移植性相对于其他紧迫问题已经退居其次时,程序设计人员都乐于对代码进行重用。然而,随着Internet的兴起,多种不同类型的CPU和操作系统连接在一起,可移植性的问题再次出现,而且更加严重。为解决可移植的问题,需要一种新的语言,这种语言就是Java。尽管Java最重要的功能是能够创建跨平台、可移植的代码(这是Java很快获得认可的原因),但值得注意的是,创建Java语言的原动力并不是Internet而是急需一种平台无关的语言,以便为嵌入式控制器开

9、发软件。当试图给Internet创建代码时,再次遇到了在嵌入式开发中遇见的问题 跨平台、可移植性。实际上,Internet是一个巨大的分布式计算空间,其中存在着多种不同类型的计算机。能解决小规模环境中移植性问题的技术同样可以应用于Internet中的大规模环境。Java通过将程序员的源代码转换成为一种叫做“字节码”的中间代码,从而使得程序可移植。然后,由Java虚拟机(JVM)来执行该字节码,所以Java程序能够在任何有Java虚拟机的环境中运行。另外,由于Java虚拟机相对容易实现,因此它对于大多数环境都是可用的。Java使用字节码,这和C、C+语言的机制完全不同,C和C+程序通常要编译为可

10、执行的机器码。机器码是和特定的CPU和操作系统相关联的。因此,如果要在不同系统上执行C/C+程序,就必须将它们重新编译为该环境下的特定机器码。所以,要创建一个可以在多种环境中运行的C/C+程序,就需要程序有多种不同的可执行版本,这不仅不切实际,代价也十分昂贵。Java采用中间语言不失为一种优雅而高效的解决方案。这也正是C#所采用的方案。如前所述,Java源自C和C+语言,其语法基于C语言,而面向对象模型则基于C+语言。尽管Java 代码既不向上也不向下兼容C/C+,但它们的语法及其相似,从而使得大量C/C+程序员能够很容易地转向Java。此外,因为Java基于并改进了现有的范例,所以Gosli

11、ng等人得以集中精力完成那些新添加的、富于创新的功能。正如Stroustrup开发C+语言时不需要从头开始一样,Gosling在开发Java语言时也不需要创建一门新语言。而且,随着Java的创建,C和C+已成为创建新计算机语言的公认的底层基础。1.1.4 C#的创建当Java成功解决了Internet环境下的可移植性问题时,另一些缺乏的功能随即暴露出来。首先是多语言互操作性,也称为混合语言程序设计,这指的是用一种语言编写的代码和用另一种语言编写的代码协同工作的能力。多语言互操作性是创建大型分布式软件系统所需要的功能,也是创建软件组件所期望的功能,因为最有价值的组件往往能够被尽可能多的计算机语言

12、采用,并能最广泛地应用于不同的操作环境中。Java另一个缺乏的功能是没有与Windows平台完全集成。尽管Java程序能够在Windows环境中运行(假定已经安装了Java虚拟机),但Java和Windows不是完全兼容的。由于Windows是当今应用最广泛的操作系统,因此缺乏对Windows的直接支持是Java的一大缺陷。为满足种种需要,微软公司开发了C#语言,它是微软在20世纪90年代后期开发的,也是整个.NET战略的一部分。2000年中期发布了C#的第一个版本,其首席设计师是Anders Hejlsberg。Hejlsberg是当今世界上处于领导地位的计算机语言专家之一,他取得了许多出色

13、的成就,例如,20世纪80年代,极其成功且极具影响力的Turbo Pascal软件因其语法的精简实现而成为了以后所有编译器的标准,该软件的最初创建者就是Hejlsberg。C#与C、C+和Java直接相关。这不是偶然的,因为这三种语言是世界上使用最广泛、最受欢迎的程序设计语言。而且,在创建C#语言时,几乎所有的专业程序员都知道C、C+和Java。通过将C#建立在坚实、易理解的语言基础上,C#提供了一种简单的从这些语言移植的方式。因此Hejlsberg既不需要也没必要从头开始,而只需将精力集中于特定的改进和创新。C#的族谱如图1-1所示,C#的“祖父”是C,从C那里继承了语法、许多关键字和运算符

14、接下来,C#基于并改进了C+所定义的对象模型。如果您了解C或者C+语言,那么对C#语言将不会感到陌生。图1-1 C#的族谱C#和Java之间的关系稍显复杂。如前面所说,Java也是从C和C+衍生而来,也继承了C/C+的语法和对象模型。类似于Java,C#被设计用来产生可移植的代码。但是C#不是衍生于Java,C#和Java更像堂兄弟,有共同的祖先,但在许多重要方面也有所不同。尽管如此,如果您对Java有一定了解,那么对C#的许多概念也将很熟悉。反过来,如果您将来需要学习Java语言,那么从C#中学到的知识也将继续有用。C#包含许多新增加的功能,本书的后面章节中将详细讨论这些功能,其中最重要的

15、功能体现在其对软件组件的内置支持。事实上,C#已经被特征化为面向组件的语言,因为它包含对面向软件组件编程的完整支持。例如,C#包含了支持组件创建的功能,如属性、方法和事件。然而,C#程序能够在安全的混合语言环境中运行,这一点才是它最重要的面向组件的功能。1.1.5 C#的发展最初的1.0版本发布后,C#一直在快速发展。C# 1.0发布之后不久,微软就发布了1.1版本。该版本包含一些细小的调整,但是没有对该语言添加任何新功能。然而,随着2.0版本的发布,情况发生了很大的变化。C# 2.0的发布是C#发展阶段中的分水岭事件,因为该版本增加了许多新功能,如泛型、部分类型(partial types)

16、和匿名方法,并且从根本上扩展了语言的范围、功能和覆盖面。C# 2.0版本使该语言真正地成为计算机语言开发的主流语言,并且表明了微软对于该语言长期发展的承诺。C#的下一个主要发布版本是3.0,这便是本书将要介绍的C#版本。因为C# 2.0增加了许多新的功能,人们期望C#的开发进程缓慢一些,从而可以让程序员有时间熟悉这些功能,但是实际情况并非如此。随着C# 3.0的发布,微软再一次将C#推到了语言设计的峰尖浪口,C# 3.0添加了一组创新的功能,这些功能重新定义了编程的发展前景。下面列出了C# 3.0版本对该语言添加的功能: 匿名类型 自动实现的特性 扩展方法 隐式类型的变量 拉姆达(Lambda

17、)表达式 语言集成查询(Language Integrated Query,LINQ) 对象和集合初始化程序 部分方法所有这些功能都非常重要并且对该语言有着深远的影响,但是其中最令人兴奋的两个功能是语言集成查询(LINQ)和拉姆达表达式。LINQ允许开发人员使用C#编程元素编写数据库样式的查询。然而,LINQ语法并不是只限于用于数据库,也可以用于数组和集合。因此,LINQ提供了一种新的方法来处理一些常见的编程任务。通常在LINQ表达式中使用拉姆达表达式,但是也可以在其他地方使用这种表达式。拉姆达表达式实现使用拉姆达运算符=的函数样式语法。LINQ和拉姆达表达式的结合为C#编程提供了全新的操作方

18、式。在本书的学习过程中,您将了解这些功能如何彻底改变编写C#代码的方式。1.2 C#如何与.NET Framework相关尽管C#语言是一门可以独立学习的计算机语言,但它和其运行时环境(.NET Framework)有着特殊关系。原因有两方面,首先微软最初设计C#语言是为了给.NET Framework创建代码。其次,C#使用的类库是由.NET Framework定义的。因此,尽管可以将C#语言和.NET环境分离开来,但两者也是紧密相关的。正因为如此,所以应该对.NET Framework以及它对C#语言的重要性有一个大致的了解,这一点很重要。什么是.NET Framework.NET Fra

19、mework定义了一个支持高度分布的、基于组件的应用程序开发和执行环境。它使得不同的计算机语言能够协同工作,从而给Windows平台提供了安全的、可移植的、通用的编程模型。和C#相关的是,.NET Framework定义了两个非常重要的实体。第一个是公共语言运行库(Common Language Runtime,CLR),它是管理程序执行的系统。公共语言运行库有诸多功能,作为.NET Framework的一部分,它被用来确保程序的可移植性、支持混合语言编程,并提供安全的执行。第二个实体是.NET类库,该库让应用程序能够访问运行时环境。例如,如果想要执行I/O操作,例如,在屏幕上显示一些内容,就

20、需要使用.NET类库来实现。对于程序设计新手来说,术语“类”或许比较陌生,我们将在本书后面的章节中详细介绍,现在先给出一个关于类的简单定义:类是一种面向对象的结构,用于帮助组织程序。只要程序满足.NET类库定义的特征,它就能在任何支持.NET运行时系统的地方运行。由于C#自动使用.NET类库,因此C#程序可以移植到任何.NET环境下运行。1.3 公共语言运行库的工作原理公共语言运行库(CLR)主要管理.NET代码的执行,其工作原理是:对C#程序进行编译时,编译器并不输出可执行代码,而是输出一个包含特殊类型伪代码(称为微软中间语言,即MSIL)的文件。MSIL定义的是一组独立于任何特定CPU的指

21、令。实际上,MSIL定义了一种可移植的汇编语言。注意,尽管MSIL在概念上类似于Java 的字节码,但两者是有区别的。当程序运行时,由CLR将中间代码转换成可执行代码。因此,任何编译成MSIL的程序都可以在装有CLR的环境上执行。这是.NET Framework具有可移植性的部分原因。微软中间语言是通过JIT编译器转换成可执行代码的。JIT的英文全称是“Just-In-Time(实时)”。该处理过程如下:当.NET程序执行时,CLR激活JIT编译器,JIT编译器根据程序中各部分的需要将MSIL转换成本机代码。因此,尽管最初C#程序被编译成MSIL,但实际仍是作为本机代码执行的。也就是说,它的运

22、行速度与不转换时编译执行的速度相比没有区别。但是,通过转换成MSIL文件程序获得了可移植性的优点。除了MSIL,编译C#程序后的另一个输出是元数据。元数据描述了程序使用的数据,以使得这些代码能够和其他代码交互。元数据和MSIL位于同一个文件中。1.4 托管和非托管代码通常,当编写C#程序时,您正在创建的就是托管代码。如前所述,托管代码在公共语言运行库的控制下执行。这样,它就会受到一定的限制,但也有许多好处。具体的限制可以简单地描述如下:编译器必须产生针对CLR的MSIL,并使用.NET类库,这两点C#都满足。托管代码的好处有很多,如现代内存管理、混合语言编程的功能、更好的安全性、对版本控制的支

23、持和简洁的软件组件交互方法。与托管代码相对应的是非托管代码,非托管代码不在公共语言运行库的控制下执行。因此,.NET Framework创建之前的所有Windows程序都使用非托管代码。托管代码和非托管代码是可以一起运行的,所以C#程序的托管代码不影响它和先前程序联合操作的能力。通用语言规范虽然所有的托管代码均具有了CLR提供的益处,但是如果用其他语言编写的程序要使用托管代码程序,为了最大化可用性,该代码应该遵守通用语言规范(Common Language Specification,CLS)。CLS描述了一组不同的.NET兼容语言的共有功能,当创建用于不同语言的软件组件时,遵守CLS是十分重要的。CLS包含通用类型系统(Common Type System, CTS)的一个子集。CTS定义了关于数据类型的规则。当然,C#同时支持CLS和CTS。

展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服