第一章:.NET 体系结构(c#高级编程 第6版) (未完)
1.1 c#与.net的关系
- c#是专门为与.NET一起使用而设计的
- c#并不是.NET的一部分,.NET支持的一些特性,c#并不支持,而c#语言支持的一些特性,.NET并不支持(例如运算符的重载)
1.2 公共语言运行库
- .NET Framework的核心是其运行库的执行环境,称为公共语言运行库(CLR,common language runtime),或.NET运行库。
- 通常将在CLR的控制下运行的代码称为托管代码(managed code)。
- 在CLR执行编写好的源代码之前,需要编译他们。在.NET中,编译分为两个阶段:
- (1)把源代码编译为中间语言(IL,intermediate language)
- (2)CLR把IL编译为平台专用的代码
- 这样设计的优点:平台无关性,提高性能和语言的互操作性。
1.2.1 平台无关性
到目前为止,.NET的平台无关性知识一种可能,因为现在.NET只能用于Windows平台。
1.2.2 提高性能
IL总是即时编译(称为JIT编译),能提高速度和性能
- 提高速度:JIT编译器并不是一次把整个应用程序一次编译完(这样会有很长的启动时间),而是只编译它调用的那部分代码。代码编译过后一次后,得到的内部可执行代码就存储起来,直到退出该应用程序为止,这样在下次运行这部分代码的时候,就不需要重新编译了。
- 提高性能:编译过程的最后一部分是在运行时进行的,JIT编译器确切地知道程序运行在什么类型的处理器上,可以利用该处理器提供的任何特性或特定的机器代码指令来优化最后的可执行代码。
1.2.3 语言的互操作性
语言互操作性:就是能将任何一种语言编译为中间代码,编译好的代码可以与其他语言编译过来的代码进行交换操作。
1.3 中间语言
中间语言的主要特征:
-
- 面向对象和使用接口
- 值类型和引用类型之间的巨大差别
- 强数据类型
- 使用异常来处理错误
- 使用特性(attribute)
1.3.1 面向对象和接口的支持
- 接口:提供一个契约,实现给定接口的类必须提供该接口指定的方法和属性的实现方式。
- c#所实现的语言交互性:
- 用一种语言编写的类能够继承用另一种语言编写的类
- 一个类能包含另一个类的实例,而不管它们是用什么语言编写的。
- 一个对象应能直接调用其它语言编写的另一个对象的方法
- 对象(或对象的引用)能在方法之间传递
- 在不同的语言之间调用方法是,能在调试器中调试这些方法调用,即调试不同语言编写的源代码。
1.3.2 相异值类型和引用类型
对于值类型,变量之间保存其数据,而对于引用类型,变量仅保存地址,对应的数据可以在该地址中找到。
1.3.3 强数据类型
- 中间语言基于强数据类型,一般不允许对模糊的数据类型执行任何操作。
- 尽管强迫实现类型的安全性最初会降低性能,但在许多情况下,我们从.NET提供的、依赖于类型安全的服务中获得的好处更多,这些服务包括:
- 语言的互操作性
- 垃圾收集
- 安全性
- 应用程序域
1. 语言互操作性中强数据类型的重要性
如果类派生自其它类,或包含其他类的实例,它就需要知道其他类使用的所有数据类型,这就是强数据类型非常重要的原因。
例如,如果VB 2008中的另一个方法返回一个Integer类型的数据,但是c#没有该名称的数据类型,如果编译器知道如何将VB中的Integer类型映射为c#定义的某种已知类型,就可以在c#代码中使用返回的类型。
这个问题在.NET中是如何解决的?
(1) 通用类型系统(CTS common type system)
- CTS定义了可以在中间语言中使用的预定义数据类型,所有面向对象.NET Framework的语言都可以生成最终基于这些类型的编译代码。
例如,VB 2008中的Intger实际上是一个32位的有符号整数,它实际映射为中间语言类型Int32,因此在中间语言代码中就指定这种数据类型。在源代码中,c#用int来表示Int32,所以编译器就认为VB 2008方法返回了一个int型的值。(在c#中,编译器识别的每一个预定义类型都映射为一个IL内置类型,这和VB 2008是一样的)
- 同时还定义了一个内容丰富的类型层次结构,其中包括设计合理的位置,在这些位置上,代码允许定义它自己的类型。
- 通用类型系统的层次结构反映了中间语言的单一继承的面向对象方法。
(2) 公共语言规范(CLS common language specification) (书中内容理解不透,也不太重要,暂时跳过)
CTS和CLS一起确保语言的互操作性。CLS是一个最低标准,所有面向.NET的编译器都必须支持它。
2. 垃圾收集
3. 安全性
4. 应用程序域(Application domain)
1.3.4 通过异常出来错误
1.3.5 特性(attribute)的使用
1.4 程序集(assembly)
1.5 .Net Framework 类
1.6 命名空间
1.7 用C#创建.NET应用程序
1.8 .C#在.NET企业体系结构中的作用