第1章 C# 和 .NET 框架 笔记
第1章 C# 和 .NET 框架
1.1 在 .NET 之前
C#为在.NET框架上开发程序而设计的编程语言。
MFC(Microsoft Foundation Class,微软基础类库)
微软公司提供的一个类库,以 C++ 类的形式封装了 Windows 的 API,并包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量 Windows 句柄封装类和很多 Windows 的内建控件和组件的封装类。
COM(Component Object Model,组件对象模型)
基于 Windows 平台的一套组件对象接口标准,由一组构造规范和组件对象库组成。组件对象不使用方法而用接口来描述自身。
1.2 .NET 时代
.NET 框架是一种面向对象的环境,主要特点:
- 多平台:可以在各种计算机上运行。
- 行业标准:使用行业标准的通信协议,如 XML、HTTP、SOAP、JSON 和 WSDL。
- 安全性:提供安全的执行环境,即使有来源可疑的代码存在。
1.2.1 .NET框架组成
.NET框架由三部分组成:CLR(Common Language Runtime,公共语言运行库)、BCL(Base Class Library,基类库)、编程工具。
CLR在运行时管理程序的执行,主要内容有
- 内存管理和垃圾收集;
- 代码安全验证;
- 代码执行、线程管理及异常处理。
BCL(Base Class Library,基类库)是 .NET 框架使用的一个大类库,可以在程序中使用。
编程工具包括编码和调试需要的一切,主要包括:
-
集成开发环境 IDE
-
.NET兼容的编译器
-
调试器
-
Web开发服务器端技术
1.2.2 大大改进的编程环境
.NET主要特点及好处
1.面向对象的开发环境
CLR、BCL 和 C# 完全面向对象,形成良好的集成环境。
系统为本地程序和分布式系统都提供了一直的、面向对象的编程模型。
2.自动垃圾收集
GC(Garbage Collector,垃圾收集器)自动管理内存,自动删除程序不再访问的对象。
3.互操作性
-
允许不同的 .NET 语言编写的软件模块无缝交互。
只要遵循一定的规则,.NET 语言的程序可以相互使用其他 .NET 语言写的类;
能够很容易集成不同编程语言生成的模块,.NET 框架也被称为“语言无关”。 -
提供平台调用特性(Platform Invoke,P/Invoke),允许 .NET 代码调用非 .NET 代码。
.NET 框架能与 COM 组件相互调用。
4.不需要COM
摆脱了COM的束缚
5.简化的部署
不需要使用注册表注册。
提供并行执行的特性,允许 DLL 不同版本在同一台机器上存在。
6.类型安全性
CLR 检查并确保参数及其他数据对象的类型安全。
7.基类库
.NET 框架提供庞大的基础类库(BCL),有时也称为 FCL(Framework Class Library,框架类库)。
主要包括:
通用基础类
集合类
线程和同步类 - 用于创建多线程程序
XML类 - 用于创建、读写XML文档
1.3 编译成 CIL
.NET 语言的编译器接受源代码文件,生成名为程序集的输出文件
程序集里的代码,不是本机代码,而是CIL(Common Intermediate Language,公共中间语言)的中间语言。
程序集 主要包含:
程序的 CIL;
程序中使用的类型的元数据;
对其他程序集引用的元数据。
1.4 编译成本机代码并执行
程序集的 CIL 直到被调用运行时才会被编译成本机代码,运行时执行的步骤:
1.检查程序集的安全特性;
2.在内存中分配空间;
3.把程序集中的可执行代码发送给 JIT(Just-In-Time,即时编译器),把其中一部分内容编译为本机代码。
程序集中的可执行代码只在需要的时候由 JIT 编译,之后被缓存起来供后续使用。不被调用的代码不会被编译为本机代码,被调用的代码只会被编译一次。
一旦 CIL 被编译为本机代码,CLR 就在运行时对它进行管理,如释放无主内存、检查数组边界、检查参数类型和管理异常等。
托管代码:由 .NET 框架编写的代码,需要 CLR。
非托管代码:不在 CLR 控制之下运行的代码,如 C/C++、DLL。
编译和执行过程
源文件 → 编译器 → 程序集 → JIT编译器 → 本机代码 → 操作系统
1.5 CLR
CLR 是 .NET 框架的核心组件,位于操作系统的顶层,负责管理程序的执行、自动垃圾收集、安全和认证
1.6 CLI
CLI(Common Language Infrastructure,公共语言基础结构)
一组 .NET 标准,将 .NET 框架的所有组件连接成一个内聚、一致的系统,详细说明了所有软件都必须遵守的规则和约定
主要组成部分:
1.CTS(Common Type System,公共类型系统)
定义了在托管代码中一定会使用的类型的特征,如
定义了一组丰富的内置类型,及每种类型固有、独有的特性;
.NET 兼容编程语言提供的类型,通常映射到 CTS 中已定义的内置类型集的某一个特殊子集;
所有类型都继承 Object;
可以确保系统类型和用户定义类型能被任何 .NET 兼容的语言所使用。
2.CLS(Common Language Specification,公共语言规范)
详细说明了 .NET 兼容编程语言的规则、属性和行为,包括数据类型、类结构和参数传递。
1.7 各种缩写
Common Intermediate Language, CIL 公共中间语言
Common Language Infrastructure, CLI 公共语言基础结构
Common Type System, CTS 公共类型系统
Common Language Standard, CLS 公共语言规范
Common Language RunTime CLR 公共语言运行库
Garbage Collect,GC 垃圾收集器
Just-In-Time JIT 即时编译器
Base Class Library BCL 基类库
1.8 C# 的演化
C#最新版本 13.0,本书中 对应版本是7.0
1.9 C# 和 Windows 的演化
C#是一门优雅的语言