C#学习笔记0:入门

关于.NET Framework

简介

.NET Framework是微软公司为开发应用程序而设计的一个平台,它不限于运行的系统(尽管Windows系统上运行的最为广泛),包括Windows、linux(称为Mono)、Mac OS等。可以使用.NET Framework来创建各种不同类型的应用程序,例如Windows桌面应用程序、Web应用程序等等。.NET Framework的设计方式确保了它可以使用多种语言,例如C#,C++,VB等,所有的语言都可以访问.NET Framework,并且它们之间还可以互相通信,例如C#开发人员可以使用VB程序员编写的代码。

包含的内容

.NET Framework包含了一个庞大的代码库,可以在客户语言(如C#)中通过面向对象编程技术来使用这些代码。代码库分为多个不同的模块,例如一个模块包含Windows应用程序的构件,另一个模块包含网络编程的代码块,还有一个模块包含Web开发的代码块,可以根据需要来选择使用不同的模块。

部分.NET Framework库定义了一些基本类型,类型是数据的一种表达方式,指定最基本类型有助于使用.NET Framework的各种语言之间进行交互操作。这成为通用系统类型(Common Type System, CTS)

.NET Framework还包含.NET公共语言运行库(Common Language Runtime, CLR),它负责管理用.NET库开发的所有应用程序的执行。

程序的编写和执行

代码编译

使用.NET Framework编写应用程序,就是使用.NET代码库编写代码(使用支持.NET Framework的任何一种语言)。VS(Visual Studio)是一种强大的集成开发环境,能够方便将.NET功能集成到代码中。

使用C#创建程序,在程序执行中,需要把C#代码转换为目标操作系统能够理解的语言,即本机代码(naive code)。这种转换成为代码的编译,由编译器执行。在.NET Framework下,编译的过程包含两个阶段。

首先将代码编译为通用中间语言(Common Intermediate Language, CIL)代码(也称Microsoft Intermediate Language, MIL),这些代码不是专用于任何一种操作系统,也非专用于C#,其他的.NET语言如VB等也会在第一阶段编译为这种语言。使用VS开发C#应用程序时,这个编译步骤由VS完成。

要执行应用程序需要进一步的工作,这就是Just-In-Time(JIT)编译器的任务,它将CIL编译为专用于OS和目标机器结构的本机代码,这样才能在特定的机器和OS上运行程序。Just-In-Time反映了CIL代码仅在需要时才编译的事实,即在应用程序的运行过程中动态编译

总结来说,JIT编译器使用的是CIL代码,CIL代码是独立于计算机、操作系统和CPU的,而不同的JIT编译器则可以针对最终程序执行的环境(如硬件条件、操作系统等)做优化。

程序集

在编译应用程序时,所创建的CIL代码存储在一个程序集中。程序集包含可执行的应用程序文件(.exe文件)和其他应用程序使用的库(.dll文件)。除此之外,程序集还包含元数据(即程序集中包含的数据的描述信息)和可选的资源(CIL使用的其他数据,例如图片文件)。

托管代码

在将代码编译为CIL,再用JIT编译器将其编译为本机代码后,CLR的任务尚未全部完成,还需要管理正在执行的用.NET Framework编写的代码(这个执行代码的阶段称为运行时(runtime))。即CLR管理着应用程序,其方式是管理内存、处理安全以及允许进行跨语言调试等。

不受CLR控制运行的应用程序属于非托管类型,某些语言(如C++)可以用于编写此类应用程序,例如访问操作系统的低级功能。在C#中只能编写在托管环境下运行的代码。将使用CLR的托管功能,让.NET处理与操作系统的任何交互。

垃圾回收

托管代码中一个重要的功能是垃圾回收,它可以确保应用程序在不使用某些内存时就完全释放这些内存。.Net垃圾回收会定期检查计算机内存,从中删除不再需要的内容,但是执行垃圾回收的时间并不固定。因为垃圾回收的执行时间是不确定的(但是一定会执行),所以设计程序的时候需要注意这一点,在需要清理内存时自己手动完成清理工作也是一个不错的选择。


本文结束,感谢欣赏。

欢迎转载,请注明本文的链接地址:

http://www.jeyzhang.com/cshape-learning-notes-0.html