到底什么是.NET?
.NET 概念比较庞大,本文只讨论基础知识,只用简单语言描述。
我们是NET程序员,但是我们有没有思考过到底什么是.NET ?
官方定义 .NET是微软推出来的一个致力于敏捷开发的软件框架。
大概2000年年左右,微软推出了.NET 标准规范,既然有了标准就等于开发时候定义接口一样,需要东西去实现它。.NET Framework 就是 .NET 的具体实现。
可以这么认为 .NET一种优秀的设计规范和平台标准。
下面我们来说说什么是 .NET Framework?
官方定义 .NET Framework 是 Windows 的托管执行环境,可为其运行的应用提供各种服务。
.NET Framework 有两个主要组件:
1. .NET 公共语言运行时 (Common Language Runtime,CLR)
CLR核心功能:内存管理,程序集加载,安全性,异常处理,和线程同步,CLR像一个管家一样,管理着程序代码的执行,为程序提供一个运行环境。被CLR托管的代码就叫托管代码。
要想了解CLR机制,就要知道我们写的C#代码经过VS 编译之后变成了什么?
左边的图是将我们编写的C#源代码编译成托管模块,右边图是托管模块的组成部分,这里我们只关注IL代码,其他的不用关注。C#代码经过编译器生成的并不是最终的CUP指令,而是一个中间语言IL代码,也就是托管代码,CLR操作的就是IL代码,最终由CLR将IL编译成计算机可以认识的Cpu指令。我们应该知道程序运行时候需要占用计算机的内存,C++时代的的程序员是需要自己手动操作管理内存的,需要自己分配和释放内存。但是我们.NET程序员是不需要进行这个操作的。这是因为CLR帮我们自动做分配内存和释放内存的这个操作了。这个操作对于NET开发者来说是透明的,这就是文章的前面所说CLR的主要功能内存管理。由CLR管理释放的内存空间叫做托管堆。在托管堆上的代码称之为安全代码也叫托管代码,反之不在托管堆上的代码就叫非托管代码,非托管代码有可能造成内存泄漏。
CLR是很复杂的一个东西。本文不做过多的讨论,只是对其概念进行简单的讲解。
2. Framework 类库
.NET Framework类库应该比较好理解,类似我们自己封装工具类一样的概念。Framework 类库 (Framework Class Library) 简称 FCL,FCL 里面定义了数千个类型供我们用。利用这些类型我们可以开发各种类型的应用程序 webService,MVC,Windows Forms ,WPF,Windows 服务等。所以要想学好.NET的,虽然不需要你都掌握整个.NET类库。这也不现实,但是也要尽可能掌握常用的类型。
总结
.NET Framework是.NET平台标准的主要的实现,实现的不仅仅有.NET Framework还有.NET Core和mono。
.NET Framework包含CLR和 FCL。
CLR为.NET程序提供一个运行环境并对其进行托管。
FCL Framework类库为.NET程序员提供了大量丰富的基础类型供其使用。封装了一些基础的操作,为了.NET程序员的开发提供了便利。
ps:文章乃个人学习笔记。大神勿喷。