上一篇文章中,我们介绍了促使我们研究.NET Framework解决方案的问题。实际上,微软以一种非常聪明的方式实现了我们前面提到的目标点。这就是我们现在要解释的。

.NET构建基块

Microsoft .NET Framework简介 - 图1
Microsoft .NET框架具有非常结构化的策略,可简化实现目标的过程。如上图所示,它是建立在三个主要模块:在公共语言运行时,通用类型系统公共语言规范。我们将详细讨论每一个。

  • **通用类型系统(CTS):每个编程语言设计者都必须指定它的一个非常重要的属性,称为类型系统。该类型SYSTE m表示其数据类型是由这个编程语言支持(例如整数,字符,花车,..等),我们可以在上面做什么操作。这使我们能够在处理数据时检测错误。例如,对某些数据类型进行非法操作(例如,添加两个布尔值)。
    在MS .NET平台中,CTS规范完全描述了运行时支持的所有可能的数据类型和编程结构。也就是说,要设计一种知道.NET的语言,它必须根据CTS规范支持其类型系统。CTS指定实体之间如何交互以及如何以.NET元数据格式表示实体。也就是说,对象如何通过消息彼此通信,以及如何在元数据中定义消息(将很快讨论)。
    但是,某些.NET语言可能不支持CTS定义的所有功能。因此,为了使一种语言类型安全,我们必须提供CTS的另一种替代方法,即通用语言规范。
  • 通用语言规范(CLS):CLS是一组规则,详细描述了给定.NET意识的编译器必须支持的最小和完整功能集,才能生成可以由CLR托管的代码.NET平台支持的所有语言都可以以统一的方式访问时间。换句话说,CLS是CTS完整功能的子集。
  • 公共语言运行时(CLR):.NET平台的核心是公共语言运行时,又名CLR。它完成了查找,加载和管理.NET类型的所有核心任务。这是CLR要做的非常重要的任务,因为它可以确保写入的类型将根据CLS(或CTS)中定义的内容正确运行。CLR有一个非常重要的模块,称为垃圾收集器。GC是负责管理内存位置的GC,因此不再需要手动进行内存管理。CLR还提供应用程序托管服务。也就是说,CLR现在不再负责直接在计算机中运行代码,而是负责运行应用程序,因此具有CLR的任何平台都可以运行该应用程序(平台独立)。此外,CLR以非常有效的方式处理线程,使我们可以非常轻松地开发并行模块。CLR执行一些安全检查,以确保访问级别和执行特权。
    CLR中的关键组件是mscore.dll,其中包含大量类型,这些类型封装了各种常见的编程任务以及所有.NET语言使用的核心数据类型。mscore.dll的作用当引用了一个程序集以供使用时,也会自动加载mscore.dll,这反过来又加载了所需的程序集。这被称为MS公共对象运行时执行引擎。mscore不仅如此。dll管理这些任务,但它也负责创建自定义类型。也就是说,当我们定义一个新类型(例如,类,结构等)时,CLR(特别是mscore.dll)会为您创建它。

总结前面所有这些块,我们可以定义三个块之间的关系,如下图所示
Microsoft .NET Framework简介 - 图2
这促使我们向前迈进了.NET框架的另一个方面,即.NET基类库。

.NET基类库

除了CLR和CTS / CLS规范外,.NET平台还提供了可用于所有.NET编程语言的基类库。与以前的状态一样,我们提到了MFC和ATL,在.NET中,我们有基类库。
Microsoft .NET Framework简介 - 图3
基类库提供的服务太多,但是我们可以在上图中总结它们。
– 数据库访问:处理数据库是我们在每个软件应用程序中面临的最重要问题之一。基类库为我们提供了丰富的类集,这些类集非常易于与数据库一起使用。Microsoft为我们提供了Active Data Objects ADO,它使我们能够访问本地和远程关系数据库。ADO在.NET平台中扩展为ADO .NET,它功能更强大。
– 桌面GUI API:为了构建具有丰富图形用户界面的应用程序,我们使用.NET类库中提供的预定义API。现在,使用.NET功能构建由偶数驱动的应用程序非常容易。最近,Microsoft发布了Windows Presentation Foundation(WPF),以支持更多图形界面功能。
– 安全性:这些类的集合使我们能够对某些关键问题执行安全性检查。例如,访问低级系统特权。
– 远程API:用于以安全方式访问远程设备。不仅提供访问,还可以远程控制设备。
– 穿线:使用线程API的集合,现在非常容易构建多线程应用程序。它还可以控制线程同步。
– 文件I / O:使用此类集合,打开,读取和写入文件非常简单。
– Web API:使用ASP.NET方法完成富Web应用程序的构建。它提供了处理客户端服务器应用程序的强大功能。
.NET框架中提供了越来越多的类库。您可以在Microsoft开发人员网络(MSDN)中对其进行调查。

.NET组件

Microsoft .NET Framework简介 - 图4
上面几行中,我们提到.NET是支持多种语言的平台。您可以从此处检查.NET支持的所有语言。但是,这实际上是如何实现的?也就是说,.NET如何为所有这些语言提供通用的运行时环境?
这是使用类似上面的技术完成的。每个.NET编译器都会产生相同的输出,中间语言(IL)代码和元数据。这被归为所谓的程序集( .dll或 .exe)。实际上,如果不共享.NET提供的相同的CLR和CTS / CLS,编译器就无法生成相同的程序集。
现在的问题是:IL和元数据的内容是什么,使得它可以从任何其他支持.NET的语言中使用?

  • CIL:与Java字节码相同,源代码未直接编译成机器指令。而是将其编译为将在.NET环境中运行的中间语言。除非绝对必要,否则CIL不会编译为机器指令。您可以使用ildasm.exeReflec tor查看任何程序集的CIL代码。只需将要调查的程序集文件( .dll或 .exe)传递给他们,然后查看结果即可。
  • 元数据:详细描述二进制文件中每种类型的特征。
  • 清单:包含有关程序集的当前版本的信息,区域性信息(本地化字符串和图像资源)以及程序正确执行所需的外部引用程序集的列表。

以上三个数据段可以组织为单个文件,也可以组织为多个文件,其中多个数据分为模块。

所以 …

所有这些功能组合在一起得出以下情况。
–用您喜欢的任何语言编写源代码(当然,必须支持.NET)。
–将代码传递给适当的.NET编译器。
–生成一个程序集文件,其中包含:CIL,元数据和清单。
– .NET执行引擎使用类加载器运行目标程序集并引用外部类。
–直到被引用,Just In-Time编译器(或Jitter)才会将CIL代码转换为机器指令。
–然后执行平台指令。
下图总结了这种情况
Microsoft .NET Framework简介 - 图5
这样就结束了我们对.NET解决方案的介绍。我们标记了.NET平台如何为我们解决所有以前的问题提供了完整的解决方案。重要的是要注意,.NET每次都会得到改进。最新版本是.NET 4.5。