[C#高级编程].NET体系结构
本章内容:
编译和运行面向 .NET的代码
MSIL的优点
值类型和引用类型
数据类型化
理解错误处理和特性
程序集、.NET基类和命名空间
本章主要介绍一些概念,内容不多。
C#是专门为Microsoft的.NET Framework设计的一门语言,是一种面向对象方法的语言。
C#就其本身而言,只是一门语言,尽管它用于生成.net Framework的代码,但它本身不是.net的一部分。.net支持的一些特性C#本不支持,反之一样,如:C#支持运算符重载,.net是不支持的。
.NET Framework的核心是其运行库执行环境,称为公共语言运行库(CLR)或.NET运行库。通常将在CLR控制下运行的代码称为托管代码(managed code)
编译过程:
把源代码编译为MSIL(Microsoft Intermediate Language),Microsoft中间语言。
CLR把IL编译为平台专用代码
IL: 低级语言,语法简单,可快速转换为本地机器码,区分大小写,基于堆栈的语言。优点:平台无关、提高性能及语言的互操作性。
IL主要特征:
面向对象和使用接口
值类型和引用类型之间的显著差异
强数据类型化
使用异常来处理错误
使用特性
CTS: 通用类型系统,通过类型,用一种编程语言写的代码能与用另一种语言写的代码沟通,CTS描述了类型的定义和行为。
CLS: 公共语言规范,和CTS一起确保语言的互操作性,是一个最低标准集。
GC: 垃圾回收器用来在.NET中进行内存管理,特别是它可以恢复正在运行的应用程序需要的内存。
应用程序域是.NET中的一个重要技术改进,是分离组件的一种方式,用于减少运行应用程序的系统开销。
程序集:包含编译好的,面向.NET Framework的代码逻辑单元,可以存储在多个文件中。
可执行代码和库代码使用相同的程序集结构,唯一的区别是可执行的程序集包含一个主程序入口,而库程序集不包含。
程序集的一个重要特性是它们包含的元数据描述了对应代码中定义的类型和方法。程序集也包含描述程序集本身的元数据。
私有程序集是最简单的一种程序集类型,一般附带在某个软件上,且只能用于该软件。因为私有程序集完全是自包含的,所以部署它的过程就很简单,只需把相应的文件放在文件系统对应文件夹中即可(不需要注册表项),这个过程称为“0影响(xcopy)安装”。
共享程序集是其他应用程序可以使用的公共库。因为其他软件可以访问共享程序集,所以需要采取一定的保护措施防止名称冲突及版本覆盖的风险。
解决办法是把共享程序集放在文件系统的一个特定的子目录树中,称为GAC(全局程序集缓存)。
为了避免名称冲突,应根据私钥加密法为共享程序集指定一个名称(对于私有程序集,只需要指定与其主文件名相同的名称即可),该名称称为强名,保证其唯一性,必须由要引用共享程序集的应用程序来引用。
与版本覆盖风险相关的问题,可以通过在程序集清单中指定版本信息来解决,也可以通过同时安装来解决。
程序集存储了元数据,包括在程序集中定义的所有类型和这些类型的成员三细节,所以可以编程访问这些数据,这个技术称为反射。