C#编程语言的起源、发展历史和特点
- 第一章:C#基础知识
- C#编程语言的起源、发展历史和特点
- 1.NET Framework
- 1.1 .NET Framework框架的组成
- 2 .NET Core
- 2.1 .NET 5
- 2.2 NET Core框架的组成
- 3 CIL中间语言和CLI公共语言基础结构
- 3.1 CLI公共语言基础结构
- 3.2 CIL中间语言
- 3.3 JIT(Just-In-Time)编译器
- 4 .NET Standard
- 5 主流.NET框架
第一章:C#基础知识
C#编程语言的起源、发展历史和特点
20世纪90年代末,微软平台的Windows编程主要针对桌面程序,然而当时互联网和Web技术快发展,市场需求量成几何形增长,程序的规模和复杂度也越来越高。于是在1999年微软公司决定创建一种新的编程语言,以面对日益增长的市场和应用程序开发需求。
C#最初发布于2000年,读作“See Sharp” [si:] [ʃɑːrp])是一种现代的面向对象的,并且类型安全的编程语言。
C#最初被称为“Cool” [kuːl],之后改名为C#。"See Sharp"是C#编程语言的口头简称,读作“C sharp”。这个名称源于音乐术语中的C♯(D♭),表示一个半音高于C的音符。但是C#的名称并不是想表达它比C语言更高级,而只是为了强调其独立性和与众不同。事实上,C#不是C语言的升级版,它借鉴了C++和Java等C风格编程语言的特点,这让开发者可以快速掌握C#程序开发。
1.NET Framework
起初C#是为了在.NET Framework框架上开发应用程序而设计的。微软公司开发和维护的.NET Framework框架是为了在Windows操作系统上运行和开发应用程序。
2002年C#1.0和.NET Framework 1.0/1.1正式版本发行,.NET时代正式揭开。
C#和.NET版本:
- C# 1.0: .NET Framework 1.0 和 1.1(C#语言诞生,专门为 .NET Framework编程提供服务)2002年
- C# 2.0: .NET Framework 2.0(增加泛型和泛型的库的支持)2005年
- C# 3.0: .NET Framework 3.0 (增加一套API用来支持WCF、WPF、WF和Web身份认证)2007年
- C# 3.0: .NET Framework 3.5 (增加LINQ)2008年
- C# 4.0: .NET Framework 4.0 (增加动态编程并且改进多线程API,加强多处理器和核心支持)2010年
- C# 5.0: .NET Framework 4.5 (增加异步和await支持)2012年
- C# 6.0: .NET Framework 4.6 (增加语法糖和表达式体成员)2015年
- C# 7.0: .NET Framework 4.6.1 / .NET Core 2.0 (增加元组和模式匹配)2017年
- C# 7.3: .NET Framework 4.8.4 (增加在catch块中使用变量模式)2018年
- C# 8.0: .NET Core 3.0 和 .NET Standard 2.1 (增加Nullable引用类型和异步流)2019年
- C# 9.0: .NET 5.0(增加了记录类型) 2020年
- C# 10: .NET 6.0 (增加了记录结构等) 2021年
- C# 11: .NET 7.0 (增加了原始字符串字面量等)2022年
1.1 .NET Framework框架的组成
.NET Framework是一个综合的开发平台,包含多个组件和工具。以下是.NET Framework的主要组成部分:
- Common Language Runtime (CLR):.NET Framework的核心组件,负责管理应用程序在运行时的执行、类型安全、内存管理、垃圾收集、安全性和异常处理等方面。
- .NET Framework Class Library / Base Class Libray(FCL / BCL):一个数量庞大的基础类库,一组预定义的类和方法,可以帮助开发人员在应用程序中完成各种常见的任务,如字符串操作、文件访问、网络通信、用户界面设计和数据操作等。
- ASP.NET:一种用于创建富Web应用程序的技术,提供了丰富的服务器控件、模板和数据绑定技术等,使得可以更容易地构建动态网站和Web服务。
- Windows Forms:一种用于创建Windows桌面应用程序的技术,提供了丰富的UI控件、事件处理、布局和绘图等功能,使得可以更容易地构建可视化应用程序。
- ADO.NET:一种用于访问和操作数据库的技术,提供了丰富的连接器、命令对象、数据适配器和数据读取器等组件,使得可以更容易地与各种数据库进行交互。
- Windows Communication Foundation(WCF):一种用于创建分布式应用程序的技术,提供了丰富的通信协议、编码器、传输机制和安全性等功能,使得可以更容易地构建跨平台和跨语言的应用程序。
- Windows Presentation Foundation(WPF):一种用于创建现代UI的技术,提供了强大的布局引擎、动画效果、渲染引擎和数据绑定等功能,使得可以更容易地构建吸引人的用户界面。
- LINQ(Language Integrated Query):将查询语句和表达式集成到C#和VB.NET语言中,从而使得可以以声明式方式查询各种数据源。
- Entity Framework:一种ORM(对象关系映射)框架,可以将对象模型和数据库模型进行映射,使得可以以面向对象的方式访问数据库。
.NET Framework由多个组件和工具组成,每个组件都提供了一些特定的功能和API,以帮助开发人员构建各种类型的应用程序和服务。通过这些组件,开发人员可以充分利用.NET Framework的优势,加快开发速度并提高应用程序的质量和可靠性。但是在过去的20几年间,计算机领域发生了翻天覆地的变化,.NET Framework面临的一个主要挑战是跨平台问题。在过去,.NET框架主要运行于Windows操作系统上,这限制了其在其他平台上的可移植性和扩展性。为了解决这个问题,2014年11月12日ASP.NET之父Scott Guthrie在Connect全球开发者在线会议上宣布:
Announcing the Open Sourcing of the .NET Core Runtime and Libraries
.NET Core 运行时和类库开源。
Announcing .NET Core Framework on Linux and OSX
.NET Core Framework可在Linux和OSX平台运行,实现跨平台。
Announcing Visual Studio Community Edition
Visual Studio Community 版本免费
之后在.NET基金会的规划下.NET Core诞生了。
2 .NET Core
.NET Core是由微软开发的一款跨平台开源框架,可以用于构建高性能、可扩展的Web应用程序、RESTful服务、云原生应用等。它是.NET Framework的轻量级和跨平台版本,具有以下特点:
-
跨平台支持:.NET Core可以在Windows、Linux和macOS等多个操作系统上运行,同时可以在不同的平台上共享代码。
-
快速和灵活:.NET Core具有高性能、低内存占用和快速启动时间等,并且可以轻松移植到新版.NET中。
-
开放和可扩展:.NET Core是一个开源项目,可以通过NuGet库和Visual Studio Marketplace等方式轻松添加第三方组件和扩展功能。
-
兼容性:.NET Core支持多种编程语言,如C#、VB.NET、F#等,同时也具有向后兼容性,可以运行以前的.NET版本的应用程序。
-
安全性:.NET Core提供了许多安全功能和工具,如数据加密、身份验证、授权等,可帮助开发人员保护应用程序免受攻击。
.NET Core还包括许多其他功能和工具,如ASP.NET Core、Entity Framework Core、Blazor等,用于Web开发、数据库访问和用户界面设计等方面。总之,.NET Core是一个跨平台框架,适用于各种类型的应用程序开发。
2020年11月,微软将.NET Core和.NET Framework整合为一个统一的开发平台,称为.NET 5。之前,.NET Core和.NET Framework是两个不同的开发平台,它们各自具有独特的特点和功能。
2.1 .NET 5
.NET 5是.NET平台的重要版本,具有以下特点:
-
统一的开发平台:.NET 5整合了.NET Core和.NET Framework的优势,提供了一个统一的、跨平台的开发平台。
-
跨平台支持:.NET 5可以在Windows、Linux和macOS等多个操作系统上运行,并且还支持许多其他的平台和设备。
-
性能和可靠性:.NET 5具有更快的启动时间、更好的内存管理和更好的性能,同时也提供了更稳定和可靠的应用程序开发体验。
-
开放和可扩展:.NET 5是一个开源平台,可以通过NuGet库和Visual Studio Marketplace等方式轻松添加第三方组件和扩展功能。
-
兼容性:.NET 5具有向后兼容性,可以运行以前的.NET版本的应用程序,并且还可以轻松移植到新版.NET中。
.NET 5是一个强大、先进和灵活的开发平台,并适用于各种类型的应用程序开发。.NET Core是.NET Framework新一代版本,.NET Core是一个开源项目,而.NET Framework不是。NET Core提供了更大的可定制性和灵活性,可以根据需要进行选择安装。NET Core 采用包(Package)的管理方式获取需要的组件,不用像.NET Framework那样使用打包安装的方式,同时各包有独立版本线。
2.2 NET Core框架的组成
.NET Core是由多个组件和库构成的跨平台开发框架,以下是.NET Core的一些常用组件:
-
.NET Core Runtime:.NET Core Runtime是.NET Core的核心组件之一,它提供了运行.NET Core应用程序所需的基本功能,如垃圾回收、线程管理、类型系统等。
-
ASP.NET Core:ASP.NET Core是.NET Core中用于构建Web应用程序的组件,它包括MVC框架、中间件、依赖注入容器、身份验证、授权等功能。
-
Entity Framework Core:Entity Framework Core是.NET Core中的ORM框架,可以用于访问和操作各种数据源。
-
System.Text.Json:System.Text.Json是.NET Core中的JSON序列化和反序列化库,可以用于将对象转换为JSON格式和将JSON格式转换为对象。
-
System.Threading.Tasks.Extensions:System.Threading.Tasks.Extensions是.NET Core中的异步编程库,可以用于简化异步编程。
-
.NET Core SDK:.NET Core SDK是用于开发和构建.NET Core应用程序的工具集,包括C#编译器、NuGet包管理器、MSBuild构建引擎等。
除此之外,还有许多其他的组件和库,如Windows Forms、WPF、Blazor等,这些组件和库都提供了各自独特的功能和服务。每个组件和库都具有自己的版本和特点,并且可以根据需要选择安装。开发人员可以根据项目需求选择最适合的组件和库,并熟悉其特点和功能,以便更高效地进行开发。
3 CIL中间语言和CLI公共语言基础结构
官方文档指出C# 程序在 .NET 上运行,而 .NET 是名为公共语言运行时 (CLR) 的虚执行系统和一组类库。 CLR 是 Microsoft 对公共语言基础结构 (CLI) 国际标准的实现。 CLI 是创建执行和开发环境的基础,语言和库可以在其中无缝地协同工作。
3.1 CLI公共语言基础结构
C#公共语言基础结构CLI(Common Language Infrastructure)是指.NET平台中的一套标准规范,用于实现跨语言、跨平台的应用程序开发和执行。它包括以下主要组成部分:
-
通用类型系统(CTS):定义了所有.NET语言的公共类型系统,提供了一种通用的类型化数据表示方式。
-
元数据(Metadata):描述了程序集中的类型、成员、属性等元素,并提供了运行时访问这些元素的接口。
-
中间语言(Intermediate Language, IL):是一种类似于汇编语言的低级别中间码,由编译器生成,并在运行时被JIT编译器转换为本机代码。
-
可移植执行文件(Portable Executable, PE):是一种特殊格式的二进制文件,包含了IL代码、元数据和其他必要的信息,可在任何.NET支持的操作系统上运行。
-
公共语言运行时(Common Language Runtime, CLR):是.NET平台的核心组件,负责将IL代码编译为本机代码,并提供垃圾回收、类型安全检查、异常处理、线程管理等功能。
通过CLI,不同语言和不同平台上的开发人员可以共享相同的代码和组件,从而提高开发效率和代码重用性。同时,CLI还保证了跨平台的可移植性和互操作性,使得.NET程序可以在任何符合CLI规范的平台上运行,无需重新编写或修改代码。
3.2 CIL中间语言
CIL中间语言(Common Intermediate Language)是一种类似于汇编语言的低级别指令集,用于.NET平台中的跨语言、跨平台代码执行。在C#程序编译过程中,C#源代码会被编译为CIL代码,然后由JIT编译器将其转换成本机代码。
CIL指令集包括了各种操作码(OpCode),例如加载、存储、算术运算、逻辑运算、比较、分支等。通过这些指令,C#程序可以访问类型、方法、变量等元素,并执行各种操作。CIL语言具有以下特点:
-
基于栈:CIL指令通常基于栈结构进行操作,即操作数和结果都保存在一个栈中。
-
强类型:CIL定义了一组强类型规则,确保类型安全和运行时安全性。
-
可读性好:CIL指令的语法清晰简洁,易于理解和阅读。
-
可移植性强:CIL代码可以在任何符合CLI规范的平台上运行,具有很强的可移植性。
CIL中间语言是.NET平台中非常重要的一部分,它使得不同语言编写的程序可以互相调用和交互,也保证了程序的可移植性和互操作性。同时,C#开发人员可以通过CIL指令了解代码的实际执行方式,优化程序性能并加深对.NET平台的理解。
处理器并不直接解释C#程序集。相反,它将程序集加载到内存中,并使用JIT编译器将CIL代码转换为本机代码。这种方式提高了程序的性能,因为本机代码比解释执行的代码更快。同时,由于.NET运行时环境是跨平台的,因此处理器可以在任何支持.NET运行时环境的平台上解释和执行C#程序集。
3.3 JIT(Just-In-Time)编译器
JIT(Just-In-Time)编译器是一种在运行时将中间代码(如CIL或MSIL)转换为本机代码的编译器。在.NET平台中,JIT编译器被用来将C#程序集的中间语言编译成本机代码,以便在处理器上执行。
JIT编译器具有以下特点:
-
动态编译:JIT编译器会在应用程序运行时,按需动态地将中间代码编译成本机代码。这种方式可以避免不必要的编译,并可以减少内存占用。
-
优化:JIT编译器可以对中间代码进行一些优化,例如删除无用指令、简化控制流等。这样可以提高应用程序的性能和效率。
-
CPU架构:JIT编译器可以生成针对特定CPU架构的本机代码,以最大限度地发挥硬件性能。
-
跨平台支持:由于JIT编译器可以根据当前平台生成本机代码,因此它可以在任何支持.NET运行时环境的操作系统上运行。
JIT编译器会在第一次使用某个方法时进行编译,并将编译后的本机代码缓存起来以提高执行速度。如果方法再次被调用,JIT编译器会直接使用缓存的本机代码,而不需要重新编译。
JIT编译器是.NET平台中的一个重要组件,它将C#程序集的中间语言编译成本机代码,并可以根据当前平台生成针对特定CPU架构的本机代码。这种动态编译方式可以提高应用程序的性能和效率,同时也保证了跨平台的可移植性。
4 .NET Standard
.NET 框架版本繁多,跨度悠长,每个实现支持的API都或多或少的重复,为了降低复杂度,微软推出了.NET Standard来定义不同版本的标准对应的API。 .
.NET Standard并不是一种实现,而是一种标准。要在.NET应用程序中使用.NET Standard,必须使用符合.NET Standard的.NET实现,例如.NET Framework 4.8的.NET标准为2.0版,.NET 7.0的.NET标准为2.1版。
.NET Standard是一个重要的标准规范,它定义了一组公共API,供.NET平台的各种实现使用,并确保.NET代码在不同平台上的可移植性和一致性。
5 主流.NET框架
-
.NET Framework:最初的.NET框架,用于Windows操作系统上的应用程序开发。
-
.NET Core:跨平台实现的.NET框架,支持Windows、Linux和macOS等操作系统,可用于开发各种类型的应用程序。
-
Xamarin:用于开发移动应用程序的.NET框架,支持Android、iOS和Mac平台,并提供了完整的.NET API访问。
-
Unity:专门用于游戏开发的.NET框架,提供了一组强大的游戏引擎功能和工具。
NET框架提供了多样化的组件和工具,能够满足不同类型应用程序的开发需求。