C#语言01-DotNet和CSharp简介

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C#.NET 程序设计
第1章.NET和C#简介
z1.1 .NET 概述
.NET首先是一个开发平台,它定义了一种公用语言子集(Common Language Sbuset, CLS),这是一种为符合其规范的语言与类库之间提供无缝集成的混合语言,.NET统一了编程类库,提供了对下一代网络通信标准,可扩展标记语言(XML)的完全支持,使应用程序的开发变得更容易,更简单。

理解.NET 最简单的方式是把它看作是执行代码的环境。

.NET管理代码的执行——启动代码、给它赋予相应的权限、为它分配内存以存储其数据,帮助释放某些不再需要的内存和资源等。

除了执行这些任务外,.NET还要使用一个非常复杂的类库——所谓的.NET基类,以便在Windows上执行大量的任务。

对这一任务, .NET承担了双重角色:管理代码的执行和为代码提供服务。

如前所述,.NET位于代码和Windows之间,可以提供需要的服务。

在解释.NET程序执行时发生的情况之前,先定义一下.NET组件和我们需要的其他术语。

z1.2 和.NET相关的几个概念
¾.NET运行(库)时:也称为公共语言运行时(Common Language Runtime, CLR),它实际管理代码。

它可以处理加载程序、运行程序的代码,以及提供所有支持服务的代码。

跟VB6运行库(MSVBVM60.DLL)功能类似。

¾受管制的代码:在.NET环境中运行的任何代码都称为受管制的代码(Managed code)。

.NET外部的其他代码也运行在Windows上,这些代码称为未受管制的代码(unmanaged code)。

¾中间语言(IL):在.NET运行库加载和运行代码时,这种语言确定代码的位置。

在编译受管制的代码时,编译器实际上使用中间语言,CLR处理代码执行前的最后编译阶段。

IL可以非常快速地编译为内部的机器代码,同时支持.NET的功能。

¾公共类型系统(CTS):为了实现语言的互操作性,必须有一组各种语言都认可的基本数据类型,这样才能对所有语言进行标准化处理。

CTS 就提供了这个功能,还提供了定义定制类的规则。

¾元数据:是一组数据表,保存的是编译后的IL代码所使用的和引用的类型信息。

其中,包括类型(类)和它们成员的名称、参数、对其他类型(一些成员可以作为返回或输入类型使用,或者可以在过程中进行实例化)的引用,以及其他细节。

在实践过程中,您可以将它看作是COM环境中使用的IDL 文件和类型库的—个极度扩展的版木(虽然元数据比它们要大得多),但是元数据装载到IL代码上以后,就不再需要在其他任何地方再进行任何的注册。

¾.NET基类:这是一个扩展的类库,它包含预先写好的代码,执行Windows上的各种任务,例如显示窗口和窗体、访问Windows基本服务、读写文件、访问网络和Internet和访问数据源。

¾装配件:装配件是存储编译好的受管制的代码的单元。

它与传统的可执行文件或DLL有些相似,但具有自我描述的重要功能,包括所谓的元数据,它给出了装配件及在其中定义的所有类型、方法等细节。

装配件可以是私有(只能用于一个应用程序),也可以是共享的(可以用于Windows上的所有应用程序)。

¾公共语言规范(CLS):这是确保代码可以在任何语言中访问的最小标准集合。

所有用于.NET的编译器都应支持CLS。

CLS构成了可以在.NET和IL中使用的功能子集,代码也可以使用CLS外部的功能。

如果非CLS功能在代码所在装配件的外部是可见的,那么这些功能就不能在某些语言中使用。

¾反射:因为装配件完全是自我描述的,因此在理论上可以编程访问装配件元数据。

实际上一些基类就是为达到此目的而设计的。

这种技术称为反射(也许因为它在本质上意味着程序可以使用这个工具检查白己的元数据)。

¾Just In Time (JIT)编译:这个术语用于表示执行编译过程的最后阶段,即从中间语言转换为内部机器代码。

其名称的来源是部分代码是按需要即时编译的。

¾无用存储单元收集:这是CLR清理不再需要的内存的方式,应用程序不必负责内存的释放。

¾名称空间:或称命名空间,是.NET避免类名冲突的一种方式。

名称空间还可以相互嵌套。

例如,大多数用于一般目的的.NET基类位于名称空间System中,基类Array在这个名称空间中,所以其全名是System.Array。

z1.3 C#语言
C#是一种新的面向对象编程语言,专门用于.NET运行时。

C#编译器只能生成受管制的代码,也可以使用.NET基类。

C#的重要性体现在两个方面:
第一,它是专门为与.NET运行时高度兼容而设计的。

第二,它是一种现代的面向对象语言,在设计它时,Microsoft还学习了其他类似语言的经验,这些类似语言是近20年来面向对象规则得到广泛应用以来开发出来的。

z1.4 C#与.NET的关系
C#就其本身而言只是一种语言,尽管它是用于生成面向.NET环境的代码,但它本身不是.NET的一部分。

一些特性由.NET支持,但C#不支持。

而另一些特性C#支持,.NET却不支持!比如一些C #异常处理语句就属于这个范围,显然,如果在代码中使用这些C#特性,编译器就把它们转换为.NET支持的特性。

另一个例子是运算符重载。

C#允许重载使用一些运算符,例如加号、减号等。

z 1.5 C#与其他语言的比较
1)C#和VB6的比较
C#和VB6最明显的区别是C#编译为MSIL,而VB6编译为内部机器代码。

用这两种语言编写的程序都需要一个运行时来执行,C#运行时的优点是它允许C#代码与其他语言编写的代码交互,允许C#代码使用.NET基类提供的丰富功
能。

从特性上看,C#的面向对象性比VB6高。

例如,VB6缺乏参数化的构造函数、运算符重载和实现继承性。

从语法上看,C#比VB6更简
洁,允许变量同时声明和初始化,语句可以放
在任意多的代码行上。

2)C#和的比较
几乎可以完成C#能完成的所有任务。

不能完成的是内嵌带有指针和其他不安全的C++用法的纯C++代码。

在代码实例和各种广告中,Microsoft强调C#比更多,另外,Microsoft计划主要采用C#继续以后的开发工作。

公开C#标准,让其他开发商也可以开发面向其他平台的C#编译器。

3)C#和VisualC++的比较
首先,C#只是C++的另一种形式。

可以把普通的C++代码内嵌到C#代码的“不安全”块中(后面章节介绍如何内嵌)。

C#比C++的效率更高
z C#禁止使用指针和指针算法(除了在不安全的代码块
中)。

z C#删除了预处理器的宏(但保留了条件编译和
#defined常数)。

复杂的宏在以不希望的方式扩展时容
易出现错误。

z C#要求在引用变量的值之前,必须先显式声明该变量,并用一个初始值进行初始化。

z C#使用switch…case语句,为了防止程序员的疏忽,switch语句中的每个case从句都必须有一个闭合的break命令。

z C#删除了全局函数,迫使用户进行面向对象的编程。

如果只有一个静态成员,那么程序中的每个函数都必须是类的一个成员。

甚至开始的Main()函数也定义为一个类的成员。

4) C#和C++ Builder的比较
Borland的C++开发环境C++Builder最著名的一点是把用户界面设计的窗体方式和C++语言结合起来。

后面将会提到,C#也支持窗体。

C#优于C++Builder的方面是C#拥有.NET运行时提供的语言互操作性。

因为用C++ Builder编译的程序显示为机器代码,所以它们必须依赖COM Service与以其他语言编写的代码交互操作。

5)C#和Delphi的比较
Delphi是Borland另一个快速应用程序开发工具,和一个类似于Pascal的专用语言组合在一起。

它依赖于BEGIN和END对来分隔语句块,其语法要比C#更迟钝和笨拙。

与C++ Builder一样,Delphi编译为机器代码,且必须依赖COM Services获得互操作性。

6)C#和Java的比较
Java和C#的语法非常类似。

甚至Java库
和.NET基类的结构也非常类似。

当然,这两种语言都依赖于字节代码。

至少在目前,Java有一个地方强过C#:平台独立性。

因为所有主要的计算平台都可以实现Java 运行时,所以相同的Java代码在理论上可以在这些平台上运行。

这是.NET程序目前做不到的。

相反,C#也有几个地方强过Java:
¾C#的语法要比Java强大,因为C#支持运算符重载和类型安全的枚举。

另外,如果需要,还可以在C#程序中选择嵌入式指针和其他不合法的语法,只要把它们放在”不安全”的代码块中即可。

¾C#可以与其他.NET语言编写的代码进行无缝交互操作,
¾.NET基类为C#提供了一个统一的、标准化的源,以满足常用的需要,例如XML、连网和图形化,为了访问相同的功能,Java程序员有时必须从各种不同的源中获取。

z1.6 C#在企业结构中的位置
¾因为C#需要有.NET运行时,所以它最适合于可以严密监控的执行环境。

除非.NET获得了广泛应用,软件开发零售商可以保证.NET运行时存在于绝大多数客户的机器上,否则零售商就可能希望把C#和.NET销售给IT部门、ASP和保证在其正确的版本中,存在有.NET运行时,并可以达到其最优性能的其他公司。

这就是说,C#是那些有兴趣建立健全、n层客户机—服务器应用程序的公司的一个很好的选择
¾使用,C#可以快速访问数据库,例如SQL Server 和Oracle数据库。

返回的数据集可以通过对象模型轻松地处理,并自动显示为XML,以便在办公内部网上传送。

¾为新建工程建立了数据库模式后,C#久成为实现数据访问的对象层的一个绝佳方式,每个数据访问对象都可以提供对不同数据库表的插入、更新和删除操作。

对于企业开发人员来说,有一个非常好的方式:创建一个程序,为任何SQL Server 数据库自动生成一个数据访问对象层。

¾因为C#是第一个基于组件的C语言,所以它也非常适合于实现事务对象层。

它为内部组件的通信封装了杂乱的信息通道系统,开发人员不必用严格遵循组织事务规则的方法再把数据访问对象组合在一起。

而且,利用属性,C#事务对象可以进行COM+服务提供的方法级的安全检查、对象暂存池和JIT启用。

另外,.NET附带了工具程序,可以让新.NET事务对象与原来的COM组件相连接。

¾最后,但也是很重要的,用C#编写的页面是定制用户界面的绝佳方法。

因为页面的编译和执行都非常快。

它们可以在 IDE中调试,非常健全。

它们支持各种语言特性,例如早期绑定、继承性和模块化,用C#编写的页面很整齐,也易于维护。

相关文档
最新文档