全面认识.NET框架 教程

本词条由 未知 2020-05-21 22:17 收藏
我们大家都知道,.NET框架是一个多语言组件开发和执行环境,它提供了一个跨语言的统一编程环境。.NET框架的目的是便于开发人员更容易地建立Web应用程序和Web服务,使得Internet上的各...
重新学习下.NET框架,在这里将会对.net框架逐步的学。加深一下对.net的认识。如果那个地方有错误,希望大家能够指出来。谢谢。
 
知识有限,先逐步了解下.net包含的什么。我就是写写我目前想了解的内容。做下笔记。有的是从别的地方看到了。感觉不错就记下来了。
 
    我们大家都知道,.NET框架是一个多语言组件开发和执行环境,它提供了一个跨语言的统一编程环境。.NET框架的目的是便于开发人员更容易地建立Web应用程序和Web服务,使得Internet上的各应用程序之间,可以使用Web服务进行沟通。从层次结构来看,.NET框架又包括三个主要组成部分:公共语言运行时(CLR:Common Language Runtime)、服务框架(Services Framework)和上层的两类应用模板——传统的Windows应用程序模板(Win Forms)和基于ASP NET的面向Web的网络应用程序模板(Web Forms和Web Services)。
 
 
一,什么是 CTS、CLS、CLR
  (1)CTS(Common Type System)是通用类型系统。主要用于解决不同语言的数据类型不同问题,他是一种类型标准,在这个标准中不但实现了COM的变量兼容类型,还定义了通过 用户自定义的方式来进行类型扩展,所以.NET平台为目标语言通过建立本身数据类型与CTS之间的映射来实现与其他语言的数据类型的交互。
 
 (2)CLS(Common Language Specification)是公共语言规范,主要用于实现多种语言之间的互操作性,是公共类型系统的子集。
 
   (3)CLR(Common Language Runtime)公共语言运行库,是所有应用程序都要使用的编程基础,他如同一个支持.net应用程序运行和开发的虚拟机。
 
二,CTS、CLS、CLR有什么用
 
  (1)CTS
 
  CTS,他定义了如何在.NET Framework 运行库中声明,使用,和管理类型,同时也是.NET Framework运行库支持跨语言基础的一个重要组成部分。
 
  功能:建立一个支持跨语言集成,类型安全和高性能代码执行的框架。提供一个支持完整实现多种编程语言的面向对象的模型。定义各语言必须遵守的规则,有助于确保用不同语言编写的对象能够发生交互 作用。
 
  定义公共语言运行库在声明、使用和管理类型时所遵循的规则的模型。通用类型系统建立一个框架,该框架使得跨语言集成、类型安全和高性能代码执行成为可能。它是您可以用来生成类库的原始资料。
 
通用类型系统支持两种类别的类型,分别为值类型和引用类型。
 
  (2)CLS
 
  CLS即公共语言规范,它是许多应用程序所需的一套基本语言功能。CLS规则定义了通用类型系统的子集,即所有适用于公共类型系统的规则都适用 于 CLS,除非CLS中定义了更严格的规则。CLS通过定义一组开发人员可以确信在多种语言中都可用的功能来增强和确保语言的互用性。CLS还建立了CLS 遵从性要求,可帮助用户确定托管代码是否符合CLS以及一个给定的工具对托管代码(该代码是使用CLS功能的)开发的支持程度。
 
  (3)CLR
 
  CLR即公共语言运行库,是.NET Framework的基础,可以将其看作一个在执行时管理代码的代理,它提供了内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。
 
三,.NET的3C:CTS、CLS和CLR
 
.NET结合Java和COM解决方案两者优点来解决互操作性问题。类似于COM定义的标准二进制格式,.NET定义了一个称为通用类型系统 Common Type System(CTS)的类型标准。这个类型系统不但实现了COM的变量兼容类型,而且还定义了通过用户自定义类型的方式来进行类型扩展。任何以.NET 平台作为目标的语言必须建立它的数据类型与CTS的类型间的映射。所有.NET语言共享这一类型系统,实现它们之间无缝的互操作。该方案还提供了语言之间 的继承性。例如,用户能够在VB.NET中派生一个由C#编写的类。
 
很显然,编程语言的区别不仅仅在于类型。例如,一些语言支持多继承性,一些语言支持无符号数据类型,一些语言支持运算符重载。用户应认识到这一点, 因此.NET通过定义公共语言规范(CLS:Common Language Specification),限制了由这些不同引发的互操作性问题。CLS制定了一种以.NET平台为目标的语言所必须支持的最小特征,以及该语言与其 他.NET语言之间实现互操作性所需要的完备特征。认识到这点很重要,这里讨论的特征问题已不仅仅是语言间的简单语法区别。例如,CLS并不去关心一种语 言用什么关键字实现继承,只是关心该语言如何支持继承。
 
CLS是CTS的一个子集。这就意味着一种语言特征可能符合CTS标准,但又超出CLS的范畴。例如:C#支持无符号数字类型,该特征能通过CTS 的测试,但CLS却仅仅识别符号数字类型。因此,如果用户在一个组件中使用C#的无符号类型,就可能不能与不使用无符号类型的语言(如VB.NET)设计 的.NET组件实现互操作。这里用的是“可能不”,而不是“不可能”,因为这一问题实际依赖于对non-CLS-compliant项的可见性。事实 上,CLS规则只适用于或部分适用于那些与其他组件存在联系的组件中的类型。实际上,用户能够安全实现含私有组件的项目,而该组件使用了用户所选择使用 的.NET语言的全部功能,且无需遵守CLS的规范。另一方面,如果用户需要.NET语言的互操作性,那么用户的组件中的公共项必须完全符合CLS规范。
 
最后一个C是公共语言运行库Common Language Runtime(CLR)。简单地说,CLR是CTS的实现,也就是说,CLR是应用程序的执行引擎和功能齐全的类库,该类库严格按照CTS规范实现。作 为程序执行引擎,CLR负责安全地载入和运行用户程序代码,包括对不用对象的垃圾回收和安全检查。在CLR监控之下运行的代码,称为托管代码 (managed code)。作为类库,CLR提供上百个可用的有用类型,而这些类型可通过继承进行扩展。对于文件I/O、创建对话框、启动线程等类型—— 基本上能使用Windows API来完成的操作,都可由其完成。
 
让我们正确看待“3C”。开发人员在构建自己的分布式应用程序时,因为 用户在编程时将直接面对CLR,应将主要精力放在学习了解CLR上,而不是CTS和CLS。而对于希望以.NET平台为目标的语言和工具开发商来说,就需 要深入理解CTS和CLS。互操作性组件是分布式应用的关键,因此理解.NET如何通过定义公共类型实现这一目标,也就显得十分重要。
 
 
 
介绍完CTS,CLS,CTS.我们来看看开发和运行.NET需要的最基本环境。
 
四,开发和运行.NET需要的最基本环境
 
我们来分析下:
 
(1).NET程序的开发
 
这个问题很简单,大部分.NET程序员都在使用微软公司提供的产品Visual Studio平台上开发.NET程序。但需要注意的是,Visual Studio IDE环境并不是惟一的、必须的工具,理论上可以使用任何一个文本编辑器编写.NET的代码,但是由于文本编辑器并不提供代码的编译调试以及语法提示等功 能,所以基本上没有程序员仅仅使用文本编辑器来编写.NET代码。 
 
(2).NET的运行
 
运行.NET程序的基础毋庸置疑是.NET Framework,可以在Microsfot的官方网站上免费下载.NET Framework。运行.NET程序必须具备的组件也是.NET Framework,这对于任何想运行.NET程序的操作系统来说都一样。 
 
注意:目前.NET对于跨平台的支持做的并不好,仅仅支持Windows平台,在Linux、Unix系统上并不能直接安装.NET Framework,只能安装第三方的Mono作为.NET Framework的替代,但Mono同.NET Framework的兼容性以及更新的速度等一系列问题,导致目前使用Mono开发的项目相对较少。 
 
总结:
 
开发和运行.NET程序必需安装.NET Framework组件,当然也必须安装Visual Studio IDE(虽然理论上文本编辑器也可以编写.NET代码,但实际上程序员都会安装微软公司的Visual Studio产品)。
 
我们对其环境也知道了,现在我们来看看.NET的运行机制是什么
 
五,.NET的运行机制
 
  (1).NET程序被编译成什么形式的代码
 
  .net程序在第一次编译后,形成CLR头,元数据和中间代码。
 
  在实时运行或者部署时,进行第二次变异,编译的结果是在CLR中可以执行的机器代码;
 
  -CLR头包含了.net在运行该程序时得到的信息,包括程序集版本号,文件名和模块版本号。
 
  -MetaData包含了所有类型的定义,所有的引用以及程序集清单。
 
 
 
  (2) JIT是如何工作的
 
  JIT引擎在编译中间代码之前,会寻找本机机器代码缓存并且确认是否可用:
 
  - 如果可以用,则直接加载;
 
  -  如果不可用,JIT引擎会查找类型中的方法存根,找到中间代码并且进行编译。
 
 
 
  (3)简述程序集的加载机制
 
  CLR通过System.Reflection.Assembly.LoadFrom和System.Reflection.Assembly.Load来主动加载程序集:
 
  - 前者通过位置加载程序集;
 
  - 后者通过 唯一标识 强命名程序集 的四个元素来标识程序集;
 
  它们的加载方式一致,其内在策略是依次通过版本策略,CODEBASE位置,应用程序域位置和程序位置来查找程序集。
 
   
 
  (4)如何配置程序集的版本策略
 
  CLR支持3个级别上设定版本策略,依次是:应用程序策略,发行者策略和计算机策略。
 
  所有的策略的设置都是通过修改配置文件来实现的。3个级别策略依次会被CLR执行,而上一个策略的执行结果将被作为下一个策略的输入。
 
  发行者策略仅仅对那些被放入GAC(缓存)的程序集,并且可以再应用程序策略中被忽略。

与我联系 详细信息
所在公司 哈尔滨网成科技有限公司
主要产品 诚信百科,溯源系统,网站建设,CRM客户管理系统,抽奖软件及程序
电话 18846797610(微信同号)
QQ 3342894389


收到的礼物:
说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!