.NET Framework概述
C# 程序在 .NET Framework 上运行,它是 Windows 的一个不可或缺的组件,包括一个称为公共语言运行 库 (Common Language Runtime 简称CLR) 的虚拟 执行系统和一组统一的类库( .NET Framework 类 库)。 CLR 是 Microsoft 的公共语言基础结构 (CLI) 的商业 实现。CLI 是一种国际标准,是用于创建语言和库在 其中无缝协同
工作的执行和开发环境的基础。
应用程序
ASP.NET
Windows Form
ASP.NET Web Service
Enterprise Service
ADO. NET
更多
.NET Framework 类库
公共语言运行库
Windows操作系统
公共语言运行库
公共语言运行库利用了不同编程语言的相似性, 抽象出了通用类型系统(Common Type System,CTS)。 公共语言运行库不是以任何特定编程语言定义 的。
什么是通用类型
系统?
算法 + 数据结构 = 程序
而数据结构在微软.NET Framework平台中的形式就是通用 类型系统(Common Type System),简称CTS。 CTS构成了.NET Framework的公共语言运行库的基础,它 为.NET平台的多语言特性提供了支持。
CTS不仅定义了所有的数据类型,并提供了面向对 象的模型以及各种语言需要遵守的标准。
通用类型系统
值类型和引用类型之间的基本区别是:
?值类型的单独实例分配在堆栈上 。 ?引用类型的实例只在堆栈上分配了对其实际 值的引用,值本身分配在堆上。
值类型向引用类型转换-装箱 引用类型向值类型转换-拆箱
.
NET Framework类库包含什么?
System
Int 32, String,….
Web
Data
Windows
Enterprise Services
XML
…
UI
Services
Forms
Serviced Component,…
XML Documents …
…
…
Connection, Dataset,…
…
仅使用.NET Framework公共语言运行库提 供的功能的代码称为托管代码。
仅使用托管代码的 应用程序 使用托管代码和非托管代码的 应用程序
托管代码
托管代码
.NET Framework 类库 公共语言运行库
.NET Framework 类库 公共语言运行库
非托管代码
Windows
托管代码包含: MSIL 以及描述该 MSIL 的元数据
元数据描述中间语言代码中的数据类型,包括每种类型的 定义、每种类型的成员的签名、代码引用的成员和运行库 在执行时使用的其他数据。 类型名称 类型可见性,可以是公共的或程序集 此类型继承自哪个类型(如果存在) 该类型所实现的任何接口 该类型所实现的任何方法 该类型所公开的任何属性 该类型提供的任何事件
程序集:
用 C# 编写的
源代码被编译为一种符合 CLI 规 范的中间语言 (IL)。IL 代码、元数据和其他 资源(例如位图和字符串)一起作为一种称 为程序集的可执行文件存储在磁盘上,通常 具有的扩展名为 .exe 或 .dll。
程序集包含清单,它提供有关程序集的类型、版 本、区域性和安全要求等
信息。
程序集清单所包含的内容如下: 程序集的名称。 程序集的版本号 。 程序集的区域性,指示程序集所支持的文化或语言 。 此程序集中所包含的所有文件的
列表,同时附有根据 这些文件计算出的哈希值 。 此程序集所依赖的其他程序集以及这些依赖程序集每 一个的版本号 。
程序集分为单文件程序集,多文件程序集
主机
X类的代码
Y类的代码
Z类的代码
X,Y和Z类的元数据
app1.dll 程序集A
P类的代码 Q类的代码
主机
R类的代码
P,Q类的元数据
R类的元数据
app2.exe 程序集B
app3.dll
执行 C# 程序时,程序集将加载到 CLR 中,这可 能会根据清单中的信息执行不同的操作。然后, 如果符合安全要求,CLR 就会执行实时 (JIT) 编 译以将 IL 代码转换为本机机器指令。CLR 还提 供与自动垃圾回收、异常处理和资源管理有关的 其他服务。由 CLR 执行的代码有时称为“托管代 码”,它与编译为面向特定系统的本机机器语言 的“非托管代码”相对应。
首次调用 Z 类的方法 1 时,将调用 JIT 编译器以将 该方法的 MSIL 转换成本机代码 。
调用 Y 类的方法 4 时,JIT 编译器将再次用于将 该方法的 MSIL 转换成本机代码。