【前言】
相信无论是讲解视频还是C#的程序设计教程,开篇都对.NET Framework 进行了一番讲解。那么很多像我一样的同学就迷糊了,不是讲C# 么,这个.NET 又是怎么回事?今天,我就来分享一下我心中关于这个问题的看法。
【正文】
一、.net 与 C#
在我看来,.net 与C# 的关系有点类似于子弹和手枪的关系,子弹本身具有能量,但是我没有手枪就很难用子弹来伤敌,而你除了用手枪发射子弹外还可以使用机枪,步枪…… 而visual开发工具就是枪械,C++就是手枪,VB.net就是机枪, C#就是步枪……
就是这种感觉,但是它们又不仅仅是手枪子弹这种简单的使用关系,它们本身又深深交融。类似于这样 .Net的部分功能又是C#的重要功能。
二、.net 总览
.net 主要有两个组件, .net 类库(如上图所示)和公共语言运行库(也有译成公共语言运行时的)。它们与应用程序,操作系统间关系如下:
1. 类库
乍一看这个图,很多同学肯定是萌萌哒、、不知所谓 ,我来进一步用文字阐述一下这个关系:类库中含有很多个程序集,一个程序集中有多个命名空间(namespace,例如:using namespace system.IO ,这样看是不是很熟悉了。 )一个命名空间中有很多个类型(Type : 类、委托、结构:integer Single 等 、枚举:enum、接口 等)
这张图基本就是类库中的基本结构,下面附上几个基本概念。
程序集:(它有很多种定义,详细了解参考百科)
经由编译器编译得到的,供CLR(公共语言运行时 Common Language Runtime )进一步编译执行的那个中间产物,在WINDOWS系统中,它一般表现为.dll或者是.exe的格式,但是要注意,它们跟普通意义上的WIN32可执行程序是完全不同的东西,程序集必须依靠CLR才能顺利执行。
程序集是组件复用,以及实施安全策略和版本策略的最小单位。
(我的感觉它大概像一个单一功能的一个小程序)
(MSIL代码 MSIL 反汇编程序是 MSIL 汇编程序(Ilasm.exe) 的伙伴工具。 Ildasm.exe 采用包含 Microsoft中间语言 (MSIL) 代码的可迁移可执行 (PE) 文件,并创建相应的文本文件作为 Ilasm.exe 的输入。)
看到这儿可能有同学会和我有一样的疑问,为什么 程序集的构成里面没有命名空间,但是命名空间又含于程序集呢? 命名空间和程序集的关系是逻辑包含关系, 上图所示是物理包含关系。就像我是由 大脑、四肢、躯干组成,但是我的思想也从属于我。
命名空间:提供了一个组织相关类和其他类型的方式。有点像UML中的包。
类型:
内置值与用户自定义值都属于结构类型。
2.公共语言运行时(CLR:Common Language Runtime)
上图基本上描述了CLR的核心组件及功能。
CLR通过CTS(Common Type System 公共类型系统)和CLS (Common Language Specification 公共语言规范)定义了标准数据类型和语言间互操作性的规则.
—— 那是不是说所有使用 .net 平台的语言 数据类型和基本语法都是相同的呢? 好像是 ,想想还有点激动。
注意: CLS 禁止 内存指针和函数指针,但是可以通过委托提供类型安全的指针
整张图,线程支持和COM 列集器 安全引擎都不太清楚是干什么用的……异常管理器我感觉应该是对应着C# 语法里的 try catch 类型检查器应该就是写代码的时候有时候会提示类型未声明那种吧。。 调试引擎就是调试用的吧~
Code manager 代码管理器 是管理 托管代码的(Managed Code),托管代码的作用之一是防止一个应用程序干扰另一个应用程序的运行,这个过程叫做类型安全性(Type safety)
托管代码的创建过程如下:
IL(intermediate language)文件的三种性质 : .net 平台无关性(.net 支持的编程语言通用) 提高性能 语言互操作性(和其他语言编译成的IL文件交互操作)
JIT把中间语言 优化为特定CPU 可执行文件,这个过程由 (IL to machine Compliers) IL到本地编译器 负责
垃圾回收器(Garbage Collerctor )负责自动内存管理。注意 垃圾回收器无法清除非托管资源,建议在Dispose 方法中提供必要的代码。
【总结】
对.net 框架的探索只能算是进行了一次盲人摸象,连摸带猜的应该也只是了解到了它的一小部分。但是没有关系,继续摸,继续猜好了,只要勇敢的去探索,去理解,下一次一定比这一次好。