第一章 .NET体系结构
1、.NET FrameWork 2.0起支持64们系统,也就是说用SQL Server 2005 或 ASP.NET 开发的所有代码迁移到64位服务器后,其运行不受影响。
2、Microsoft 中间语言(Microsoft Intermediate Language,MSIL或简称 IL),所有编译好的代码都要使用这种语言。通用类型系统(Common Type Sytem,CTS)及公共语言规范(Common Language Specification,CLS)提供.NET语言之间的互操作性。
3、.NET FrameWork的核心是其运行库的执行环境,称为公共语言运行库(CLR)或.NET运行库。通常在CLR控制下运行的代码称为托管代码(managed code)。
在CLR执行开发的源代码之前,需要编译它们。在.NET中,编译分为两个阶段:
(1)把源代码编译为IL。
(2)CLR把IL编译为平台专用的代码。
4、IL问题即时编译(称为 JIT),而Java字节码常常是解释性的。JIT编译器并不是把整个应用程序一次性编译完,而是只编译它调用的那部分代码。代码编译过一次之后,得到的内部可执行代码就存储起来,直到退出应用程序为止,这样下次运行这部分代码时,就不需要重新编译了。
Java的编译方式有两种,一种是和C++等语言一样的,把源代码编译成和本地机器平台相关的机器语言,叫即时编译。另一种是编译成一种中间的字节码,与机器平台无关的,这种也是常用的,叫解释型的。 即时编译器因为产生的是本地机器的机器码,能直接执行;不像字节码还要在JVM(Java虚拟机)上解释运行,所以执行得更快些。
5、对于值类型,变量直接保存其数据,而对于引用类型,变量仅保存地址,对应数据可以在该地址中找到。引用类型的实例总是存储在托管堆中,值类型一般存储在堆栈中
(但如果值类型在引用类型中声明为字段,它们就内联存储在堆中)。
6、CTS定义了可以在中间语言中使用的预定义数据类型,所有面向.NET Framework的语言都可以生成最终基于这些类型的编译代码。
7、程序集是包含编译好的、面向.NET Framework的逻辑单元。程序集是完全自我描述性的,也是一个逻辑单元而不是物理单元,它可以存储在多个文件中
(动态程序集的确存储在内存中,而不是存储在文件中)。如果一个程序集存储在多个文件中,其中就会有一个包含入口点的主文件,该文件描述了程序集中的其他文件。
8、如果没有显式提供命名空间,类型就添加到一个没有名称的全局命名空间中。