前言:这是一些总结,说的都是重点,或者说是后面的铺垫,如果有专题模块会提示出来(就是对这个专题不感兴趣的可以跳过)。另外有不同见解的地方可以提出来大家一起讨论。
一、基础认识:
在学习C#之前一定要先了解.Net Framework
1).Net Framework是microsoft为开发应用程序而创建的一个平台。
2).Net Framework的microsoft版本运行在windows操作系统上
3)Mono是.Net Framework的开源版本(包含c#编译器),该版本可以运行在几个操作系统上(LInux,Mac OS)
4)使用.Net Framework的重要原因是它可以作为集成各种操作系统的方式。
5).Net Framework定义并未限制应用程序的类型。可以使用.Net Framework创建windows程序,web应用程序,web服务和其他各种应用程序。
6).Net Framework还推出了各种语言的.Net版本(c++,c#等),所有这些语言都可以访问.Net Framework,它们彼此之间还可以通信。
二、了解.Net Framework的一些作用后,却不知道它包含的具体内容有哪些?
.Net Framework主要包含一个非常大的代码库,可以在客户语言(如c#)中通过面向对象编程技术(OOP)来使用这些代码。这个库分为多个模块,这样就可以根据希望得到的结果来选择使用其中的各个部分。其目的是,不同操作系统可以根据自己的特性,支持其中的部分或全部模块。
CTS和CLR
部分.Net Framework库定义了一些基本类型。类型是数据的一种表达方式,以便使用.Net Framework在各种语言之间进行交互操作。这称为通用类型系统(CTS)。
》拓展:数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作,在CTS中把类型分为值类型和引用类型。
除了提供库以外,.Net Framework还包含.NET公共语言运行时(Common Lanugage Runtime,CLR),它负责管理用.Net库开发的所有应用程序的执行。
(专题:不记得不影响编程)
三、怎么使用.Net Framework编写程序呢?
就是使用.Net代码库编写代码(使用支持.Net Framework的任何一种语言)。用VS和VCE开发,
VCE是VS的一个删减版本(仅支持c#),这些环境的优点是便于把.Net功能集成到代码中。我们创建的代码完全是c#代码,但使用了.Net Framework,并在需要时利用了VS和VCE中其他的工具。
回顾:在学C++的时候,肯定接触过“编译器”这个东西,当然没听过也不要紧,它是个什么东西呢,有什么作用呢?
为了执行c#代码,必须把它们转换为目标操作系统能够理解的语言,即本机代码(native code)。这种转换称为编译代码,由编译器执行。但在.Net Framework下,包括两个阶段。
CIL和JIT:
1)编译器使用.Net Framework库的代码时,不是立即创建专用于操作系统的本机代码,而是把代码编译为通用中间语言(CIL)代码,这些代码并非专门用于任何一种操作系统,也非专门用于c#。开发c#应用程序时,这个编译步骤由VS和VCE完成。
2)JIT编译器的任务是把CIL编译为专用于OS和目标机器结构的本机代码,这样OS(操作系统)才能执行应用程序。
顾名思义,JIT编译器使用CIL代码,而CIL代码是独立于计算机,操作系统和CPU的。
提到编译器,就不得不拓展下程序集这个东西了:
在编译应用程序时,所创建的CIL代码存储在一个程序集中。程序集包括可执行的应用程序文件(.exe) 和其他程序使用的库(.dll)。
程序集包含CIL外,还包含元信息(即程序集中包含的数据的信息,也称为元数据)和可选的资源(CIL使用的其他数据,例如,声音文件和图片)。元信息允许程序集完全自描述。不需要其他信息就可以使用程序集。
因此,部署应用程序就非常简单了,只需要把文件复制到远程计算机上的目录下即可
托管代码:
在将代码编译为CIL,再用JIT编译器译为本机代码后,CLR的任务还没有完成,还需要管理正在执行的用.Net Framework编写的代码(这个执行代码的阶段通常称为运行时(runtime))。
即CLR管理着应用程序,其管理方式是管理内存、处理安全性以及允许进行跨语言调试等。
相反,不受CLR控制运行的应用程序属于非托管类型(c++可以编写这类语言程序),例如访问系统的低级功能。
但在c#中,只能编写在托管环境下运行的代码。我们将使用CLR的托管功能,让.Net自己与系统进行交互。
垃圾回收:
托管代码最重要的一个功能是垃圾回收。这种.Net方法可确保应用程序不再使用某些内存时,就会完全释放这些内存。
总结:
创建.NET应用程序所经历的步骤:
1.使用.NET兼容语言(c#)编写应用程序代码
2.把代码编译为CIL(通用中间语言),存储在程序集中
3.使用JIT编译器将代码编译为本机代码
4.在托管的CLR环境下运行本机代码,以及其他应用程序或进程