转自https://www.cnblogs.com/cocoon/p/4997005.html
1、C#是一种面向对象编程语言,是为开发.NET框架上的程序而设计的。
(1)C#是由C和C++衍生出来的,所以其可调用由 C/C++ 编写的本机原生函数,同时不损失C/C++原有的强大的功能。
(2)C#所开发的程序源代码并不是编译成能够直接在操作系统上执行的二进制本地代码。它是被编译成为中间代码,然后通过.NET框架的虚拟机(即CLR)来执行。所以如果计算机上没有安装.Net框架,那么程序将不能够被执行。在执行的过程中,.Net框架会将中间代码翻译成为二进制机器码,从而使它得到正确的运行。最终翻译的二进制代码将被存储在一个缓冲区中。所以一旦程序使用了相同的代码,那么将会调用缓冲区中的版本。这样如果一个.Net程序第二次被运行,那么这种翻译不需要进行第二次,速度会明显加快。
2、.NET框架有三部分组成(如下图):
1)CLR的介绍参考3
2)编程工具:涵盖了编码和调试需要的一切:包含:VisualStudio集成开发环境、.NET兼容的编译器(例如:C#、VB、JScript和托管的C++)、调试器、服务器端改进(比如ASP.NET)
3)BCL(Base Class Library,基类库):是.NET框架使用的一个大的类库,而且也可以在你的程序中使用。包括以下一些类。
1>通用基础类:这些类提供了一组极为强大的工具,可以应用带广泛的编程任务中,比如字符串操作、安全和加密。
2>集合类:这些类实现了列表、字典、散列表以及位数组。
3>线程和同步类:这些类用于创建多线程程序。
4>XML类,这些类用于创建、读取以及操作XML文档。
3、CLR(公共语言运行库)在运行期管理程序的执行:主要包含:内存管理、代码安全验证、代码执行、垃圾收集。如下图
(1)自动垃圾收集:CLR有一项服务称为GC(Garbage Collector,垃圾收集),它能为你自动管理内存。
1)GC自动从内存中删除程序不再访问的对象
2)GC是程序员不再操心许多以前必须执行的任务,比如释放内存和检查内存泄漏。这可不是小特性,因为检查内存泄漏可能非常困难而且耗时。
4、代码的编译过程:
(1)编译成CIL:.NET语言的编译器接受源代码文件,并生成名为程序集的输出文件。程序集可以是可执行文件或DLL。
(2)编译成本机代码并执行:程序的CIL直到它被调用运行时才会被编译成本机代码。在运行时,CLR执行下面的步骤
1>检查程序集的安全特性
2>在内存中分配空间
3>把程序集中的可执行代码发送给实时(Just-in-Time)编译器,把其中的一部分编译成本机代码。
(3)编译和执行综述:无论原始源文件的语言是什么,懂遵循同样的编译和执行过程。