2019新的一年,祝大家新年快乐,工作生活一帆风顺,心想事成!诸事大吉!
这篇文章是我今年的第一篇博客,主题是:C# .NET .NET Framework .NET CORE 等这些名词之间有什么关联关系。
费话不多说,直接进入主题。
.NET的正式诞生:2002年2月13日微软正式推出.NET的开发工具--Visual Studio.NET 2002。
.NET平台结构图:
我们看上图,我们一一来做解释:
硬件设备和操作系统我就不做解释了,这是软件运行的载体或环境,计算机行业的基础。
.NET Framework(以下简称.NET 框架):
.NET Framework是安装和运行在操作系统上的,是.NET最基础的框架,开发.NET应用程序的核心基础。
它提供了创建、部署和运行.NET应用的环境,主要包含三个关键的组成元素:
- CLR:公共语言运行时(Common Language Runtime)
- FCL:框架类库(.NET Framework Class Library)
- DLR:动态语言运行时(Dynamic Language Runtime)
基于.NET框架可以支持多种语言进行开发,如 C#,VB.NET,C++等,也就是我们俗称的跨语言开发
开发和运行一个.NET 应用程序必须安装.NETFramework。
结构图:
……
CLR:公共语言运行时
CLR是.NET框架的基础,它提供了所有.NET应用程序运行时环境,是所有.NET应用程序都要使用的编程基础。
CLR也可以看作是一个在执行时管理代码的代理,管理代码是CLR的基本功能,能够被托管的代码称为托管代码,
反之称为非托管代码。托管代码以“CLR”为目标,非托管代码以“操作系统”为目标
CLR包含三个组成部分:
CLS:公共语言规范(Common Language Specifcation):
是一种最低的语言标准,它制定了一种以.NET平台为目标的语言所必须支持的最小特征,以及该语言与其它.NET语言之间实现互操作所需要的完整特性。
凡是遵守这个标准的语言在.NET框架下都可以实现互相调用。简单说:就是把各种语言转换成统一的语法规范。
CTS:通用类型系统(Common Type System)
解决不同语言数据类型不同的问题,如C#中的整形是int,而VB.net中的整形是Integer,通过CTS我们把它们两个编译成通用的类型Int32。
所有的.NET语言共享这一类型系统,在它们之间实现对接,简单说:就是把各种语言中的不同数据类型,转换成统一的通用的数据类型。
JIT:即时编译器(Just In Time)
将用于转换之后的微软中间语言编译为二进制语言,交给CPU执行
CLR的编译过程:
.NET所有编写的源代码都不被编译成本地代码,而是由各自语言的编译器,编译成微软的中间代码(Microsoft Intermediate Language,MSIL).
中间语言MSIL或IL,再由JIT编译器转换成机器代码(操作系统专用代码)
注:
IL我们通常称之为程序集语言,因为.NET程序集需要由.NET运行时加载才能运行,所以IL代码也叫做托管代码(Managed Code),
它是一种比高级语言低,比机器语言要高的中间语言,基于堆栈,又支持面向对象。
FCL:框架类库:
- 最底层,由BCL的大部分组成,主要作用是对.NET框架、.NET运行时及CIL语言本身进行支持,例如基元类型、集合类型、线程处理、应用程序域、运行时、安全性、互操作等。
- 中间层,包含了对操作系统功能的封装,例如文件系统、网络连接、图形图像、XML操作等。
- 最高层,包含各种类型的应用程序,例如Windows Forms、Asp.NET、WPF、WCF、WF等。
FCL的内容被组织成一个树状的命名空间(Namespace Tree),每个命名空间可以包含许多类型及其它命名空间,
在使用FCL时,我们需要引入其相应的命名空间。
核心命名空间简介:
System:此命名空间包含所有其他的命名空用,在 System命名空间中包含了定义NET中使用的公共数据类美型,如 Boolean,
DateTime和lnt 32等。此命名空间中还有一个非常重要的数据类型" Object", Object类是所有其他NET对象继承的基本类
System Collections. Generic:支持泛型操作,是.NET 2.0新增的内容.
System IO:支持对文件的操作、如复制,粘贴、删除及对文件的读写等
System.Net:支持对网络协议的编程
System.Dat提供对表示 ADO. NET结构的类的访问
System.Windows. Fonns:用于开发 Windows应用程序,引入这个命名空间才能使用 Win forms的控件和各种特性。
System.Drawing:支持GDI+基本图形操作
DLR:动态语言运行时
在NET Framework 4.0中新增了动态语言运行时DLR(Dynamic Language Runtime),相对于CLR微软提供了DLR
用来向CLR中添加了一组专门用于满足动态语言的服务, 借助于DLR,可以开发在.NET Framework 上运行的动态语言,
而且可以使用C#,VB.NET等语言方便地与动态语言交互,目前比较出名的DLR应用有IronPython。
.NET Framework的版本跌代:
该框架在version 6之后从.NET Framework分离出来。
7、Parallel linq
简称并行 LINQ (PLINQ) 是 LINQ to Objects 的并行实现。
PLINQ 将 LINQ 语法的简洁和可靠性与并行编程的强大功能结合在一起。 就像面向任务并行库的代码一样,PLINQ 查询会根据主计算机的能力按比例调整并发程度。
在许多情况下,PLINQ 可通过更有效地使用主计算机上的所有可用内核来显著提高 LINQ to Objects 查询的速度。 这一性能提升使桌面具备高性能计算能力。
8、Task parallel library
简称任务并行库 (TPL) 是 System.Threading 和 System.Threading.Tasks 空间中的一组公共类型和 API。
TPL 的目的是通过简化将并行和并发添加到应用程序的过程来提高开发人员的工作效率。
TPL 动态缩放并发的程度以最有效地使用所有可用的处理器。 此外,TPL 还处理工作分区、ThreadPool 上的线程调度、取消支持、状态管理以及其他低级别的细节操作。
通过使用 TPL,你可以在将精力集中于程序要完成的工作,同时最大程度地提高代码的性能。
9、Modern UI Runtime
简称Modern UI,是一个专注于用户界面设计的框架
10、Task-Based Async Model:基于任务的异步模型
最新版的.Net Framework 4.7主要带来了以下方面的提升:
- 为Win10窗体应用带来了高DPI支持;
- 为Win10上的WPF程序带来了触控支持;
- 增强了加密支持;
- 提升性能和稳定性。
介绍完.NET Framework,再来说说.NET平台最新发布的.NET Core。
结构图如下: