.NET 相关

以前都是打开VS就写程序,也没怎么关注过,程序到底是怎么执行的,就算找资料看了也不放在心上。久而久之,总觉得这部分是个难问题。现在集中好好看一下,做一个笔记。

主要是看了《.NET 4.0 面向对象编程漫谈(基础篇)》上的内容,所以主要就记录书上的内容。这本书不错,推荐给大家。

从开发各种应用软件的程序员角度看,.NET  FrameWork可以看成Win32 API的一个替代品,它易于理解与使用的面向对象方式调用Windows操作系统所提供的各种系统功能。在.NET  Framework下编程,不再需要与各种复杂的Win32 API 函数打交道,只需要使用现成的组织的井井有条的各种“类(class)”即可,软件开始的门槛有效的降低。

下图展示了.NET  Framework 在整个软件体系结构中的地位。

.NET 相关_第1张图片

.NET  Framework 成为了承上启下的一层,向内包容着操作系统内核,向外给运行于其上的各种.NET  应用程序提供访问操作系统核心功能的服务。

(有时间看一下其他开发平台是怎么回事,补充上来。)

http://www.cnblogs.com/muyue/archive/2012/11/13/2768126.html

这里还有一个介绍net平台的博客。

“公共语言运行时(Common language runtime,CLR)”是.NET  Framework 的核心与基石。所有可以在.NET 平台上运行的程序其实都处于CLR的管理之下。从开发.NET  应用程序角度,我们可以把CLR看做一台专用于运行.NET 应用程序的“虚拟计算机(Virtual Machine ,VM)”。

  CLR 这台虚拟计算机所配备的“CPU”可以执行一种专有的命令--——“IL(Intermediate Language,中间语言)指令”,这种指令相当的“高级”,拥有许多面向对象的特性,比如他的“.ctor”指令可以直接调用特定类型的构造函数,因此,我们不妨将其视为一种“面向对象的汇编语言”。

有趣的是,这台虚拟计算机的体系结构相当复杂,除了“CPU”之外,只有一个“计算堆栈(Evalution Stack)”和响应的“内存”,数据就在这两个地方来回传送。

CLR可以看成是一台“基于堆栈”的虚拟计算机,它提供即时编译、垃圾收集、类型管理、异常捕获等功能,为所有的.NET 应用程序提供一个运行环境。

什么是IL

不管是什么语言编写的.NET 程序,最后都会被各自的编译器编译成IL指令。程序运行时,.NET JIT编译器从程序集中读入IL指令并将其动态编译为可以被本地CPU执行的机器指令再执行(见下图):

.NET 相关_第2张图片

http://book.51cto.com/art/201101/243604.htm

什么是程序集:

“程序集(assembly)”是.NET Framework中基本的软件模块,他可以包含数目不限的类型,其载体为一个或多个DLL文件,也可以是一个可独立执行的EXE文件。

程序集有复杂的内部结构,见下图:

.NET 相关_第3张图片

首先,程序集中包含项目中所有源码编译生成的IL代码,这些大妈完成特定的功能,在程序运行时将会被即时(Just-In Time,JIT)编译为本地代码(Native Code)。

其次,程序集必须要有一个类型清单,向外界说明“我拥有多少个类,每个类都有那几个方法和字段”之类的信息,这个清单被称之为“类型元数据(Type Metadata)”.

除此之外,可能还有一些其他类型的数据,比如源码中要访问的某图片文件和字符串常量,也可以嵌入程序集中,这部分数据称为“资源(Resources)”。

程序集有两种:单文件程序集和多文件程序集。

多文件程序集中的各个文件只是逻辑上与关联,在CLR看来是一个整体,但是在操作系统看来,则是IDulide文件,可以被单独的复制和删除。如果某一个文件丢失,CLR在装入此程序集时会跑出一个异常。

在实际开发中,多文件程序集用的较少,更多的是单文件程序集。

元数据在.NET Framework中有很重要的作用。正是由于元数据的存在,使用程序集成为了“自说明的(Self-Description)”即不再需要其他机制(比如注册表)的帮助,自身就向外界提供了足够多的信息。






你可能感兴趣的:(.NET 相关)