什么是clr

了解了.NEt的结构后,我们该看看.NET利用其结构为我们创造的运行环境--公用语言运行时环境(CLR)。它是C#及其它支持.NET平台的开发工具的运行基础。具体来说,它为我们的应用提供了以下益处:

●跨语言集成的能力。

●跨语言异常处理。

●内存管理自动化。

●强化的安全措施。

●版本处理技术。

●组件交互的简化模型。

2.2.1、理解CLR

.NEt提供了一个运行时环境,叫做公用语言运行时,它管理着代码的执行,并使得开发过程变得更加简单。这是一种可操控的执行环境,其功能通过编译器与其它工具共同展现,你的代码将受益于这一环境。依靠一种以运行时为目标的(指完全支持运行时环境的)编译器所开发的代码叫做可操控代码。它得益于可操控环境的各种特性:跨语言集成、跨语言异常处理、增强的安全性、版本处理与开发支持、简单的组件交互模型以及调试服务。为了使运行时环境能够向可操控代码提供服务,语言编译器需要产生一种元数据,它将提供在你使用语言中的类型、成员、引用的信息。元数据与代码一起存储,每个可加载的CLR映像均包含了元数据。运行时环境使用元数据定位并载入类,在内存中展开对象实例,解决方法调用,产生本地代码,强制执行安全性,并建立运行时环境的边界。

运行时环境自动处理对象的展开与引用,当它们不再使用时负责它们的释放。被运行时环境进行这样的生命周期管理的对象被称为可操控代码。自动内存管理消除了内存溢出,同时也解决了其它一些常见的语法错误。如果你的代码是可操控的,你仍然可以在需要的时候使用非可控代码,或者在你的.NET应用中同时使用可控与非可控代码。由于语言编译器支持他们自己的类型,比如一些原始类型,你可能并不总是知道(也不必知道)你的数据是否是可控的。

CLR使设计跨语言的组件与应用变得更加容易。以不同语言设计的对象能够彼此间进行通信,并且它们的行为能够紧密地综合与协调。举个例子,你定义了一个类,然后可以在另一种不同的语言中从该类中派生了一个类或者调用它其中的一个方法。你也可以向另一种语言中类的方法传递该类的一个实例。这种跨语言的集成之所以可能,因为以运行时间为目标的语言编译器与工具使用一种运行时间所定义的公用类型系统,他们遵守运行时的规则(公用语言规范)来定义新的类型,生成、使用、保持并绑定类型。

作为元数据的一部分,所有可控组件携带了关于它们所依赖的组件与资源的信息。运行时环境使用这些信息来保证你的组件或应用具有需要的所有东西的特定版本,其结果是你的代码将不会因为版本冲突而崩溃。注册信息与状态数据不再保存在难以建立与维护的注册表中,你所定义的类型及附属信息作为元数据被保存,这使得复制与移动组件的复杂程度得到降低。

编译工具用他们自己的方式向开发人员展现CLR的功能。这意味着运行时间的一些特性可能在不同的语言中表现形式将会有所不同。你怎样体验运行时的特性将取决于你所使用的语言,比如说,如果你是一位VB开发人员,你可能注意到在运行时环境的帮助下,VB语言比以前具有更多的面向对象的特性。

2.2.2、可操控执行的含义

前面的叙述中,我们多次提到了“可操控”这一概念。这意味着它指向的对象在执行过程中完全被运行时环境所控制。在执行过程中,运行时环境提供以下的服务:自动内存管理、调试支持、增强的安全性及与非可操控代码的互操作性,例如COM组件。

在可控执行进程中的第一步是选择源代码的生成工具。如果你希望你的应用拥有CLR提供的优势,你必须使用一种(或多种)以运行时为目标的语言编辑器,例如:VB、C#、VC的编译器,或者一种第三方编译器如PERL或COBOL编译器。

由于运行时是一种多语言执行环境,它支持众多的数据类型和语言特性。你使用的语言编译器决定你将使用运行时的哪一部分功能子集。在代码中使用的语法由你的编译器决定,而不是运行时环境。如果你的组件需要被其他语言的组件完全使用,那么你必须在你组件的输出类型中使用CLR所要求的语言特征。

当你完成并编译你的代码时,编译器将它转换为微软中间语言(Microsoft Intermediate Language,MSIL),同时产生元数据。当你要执行你的代码时,这种中间语言被即时(Just In Time,JIT)编译器编译成本地代码。如果安全策略需要的代码是类型安全的---通常情况下都是如此---JIT编译器将在编译进程中对中间语言进行类型检查。一旦失败,在代码执行中将会触发异常。

时间: 2024-08-04 07:14:19

什么是clr的相关文章

CLR全面透彻解析: .NET应用程序可扩展性

借助 Microsoft .NET Framework,编程人员便可轻松获取由不同开发人员和公司构建的组件,并将这 些组件集成到自己的应用程序中.但仅当已知哪些组件是构建基础时才能轻松实现上述过程.如果在构建 时对所需组件一无所知(对于加载项,通常会遇到这种情况),那么事情就会变得更加困难.开发人员在 扩展其应用程序时经常会遇到问题.例如,应将加载项存储在数据库中还是磁盘上?开发人员应考虑已知 接口的加载项以获得激活类型吗?使用 AppDomain.AppDomainManager 和 AppD

使用 SQL Server 2005中的 CLR 集成

本文描述了数据库应用程序开发人员和架构师如何利用 SQL Server 2005 中的 CLR 集成功能.本文对基于 CLR 的编程方式与 SQL Server 中支持的现有编程模型(如 TransacT-SQL 和扩展存储过程)进行了比较,并且强调了各自相对的优缺点.还提供了一组选择合适的编程替代方法的高级指导,以及一些示例和代码示例. 一.简介 Microsoft 通过宿主 Microsoft .NET Framework 2.0 公共语言运行库 (CLR),SQL Server 2005显

SQL Server 2005 CLR 功能简介

在SQL Server 2005的众多被高度评价的特性中,有一个最适合那些对SQL Server编程的人员的就是通用语言运行时,缩写为CLR(Common Language Runtime).CLR允许编程人员直接在SQL Server 中创建存储过程,触发器,用户定义函数,集合和类型.CLR有很多的承诺,但是它也具有一些缺陷. CLR的重要性有几个比较大的原因.首先,由于SQL Server编程已经成熟了,编码器运行在SQL Server 自身可能的限制之中,并且很大程度上依赖于外部代码来执行

有关SQL Server 2005 CLR

在SQL Server 2005的许多被大力推荐的特性里面,有一项可能对那些使用SQLServer 工作的编程人员最实用的是Common Language Runtime,或者简写为CLR.CLR可以让编程人员直接在SQL Server中创建存储过程.触发器,用户自定义函数,集合体和类型.CLR有很多的承诺,但是也有一些缺陷. 关于CLR的重要性有一些主要的原因.首先,随着SQL Server 编程技术的成熟,代码编写人员陷入了SQL Server自身的一些限制之中,并且在很大程度上依赖外部的代

探讨SQL Server 2005.NET CLR编程

本文将解释如何在SQL Server 2005中以尽可能最简单的方法创建基于.NET的CLR子例程.本文主要针对在服务器端使用SQL Server 2005的.NET开发者. 一.创建SQL Server 2005数据库 这一节主要讨论创建一个将用于本文中的数据库和表格.详见下列步骤: · 执行"Start->Programs->Microsoft SQL Server 2005->SQL Server Management Studio",并使用必要的证书连接到你的

编写执行你的第一个Yukon CLR(通用语言运行时)存储过程

存储过程|执行 编写执行你的第一个Yukon CLR(通用语言运行时)存储过程 作者:Suhil Srinivas 翻译:朱二 原文出处:http://www.c-sharpcorner.com/Longhorn/Yukon/First-CLR-Procedure.asp 描述这篇文章描述了种种编写和执行一个Yukon CLR 通用语言运行时存储过程的步骤.对开发混合数据类型的SQL 存储过程来说,本文也是一个起点.需求正确安装SQL Server Yukon beta1介绍Yukon 是微软公

What is CLR?

Microsoft's .NET is a broad family of products representing the company's next generation of services, software, and development tools. At the core of the .NET strategy lives the Common Language Runtime. The CLR is a platform for software development

.Net平台下CLR程序载入原理分析

程序 Flier Lu <flier_lu@sina.com.cn>   注意:本系列文章在水木清华BBS(smth.org)之.Net版首发,      转载请保留以上信息,发表请与作者联系     与传统的Win32可执行程序中的本机代码(Native Code)不同, 微软推出的.Net架构中,可执行程序的代码是以类似Java Byte Code的 IL (Intermediate Language)伪代码形式存在的.在.Net可执行程序载入后, IL代码由CLR (Common Lan

MS.Net CLR 扩展PE结构分析2

Flier Lu <flier_lu@sina.com.cn>   注意:本系列文章在水木清华BBS(smth.org)之.Net版首发,      转载请保留以上信息,发表请与作者联系   Metadata 篇   第一章 Metadata 概述   1.1 什么是 Metadata       Metadata翻译成中文是"元数据",可以理解为Type of Type, 说白了就是描述类型的类型数据.从最初级的语言层面支持的RTTI ("近代"的编程

MS.Net CLR 扩展PE结构分析(转,很不错的文章)

Flier Lu <flier_lu@sina.com.cn>   注意:本系列文章在水木清华BBS(smth.org)之.Net版首发,      转载请保留以上信息,发表请与作者联系   概述       本系列文章,将从系统层角度,通过对MS.Net CLR架构对PE映像结构的扩展的分析 , 解析MS.Net CLR架构的底层部分运行机制,帮助读者从更深层次理解CLR中某些重要概念 本文读者应具备基本的Win32编程经验,了解.Net中常见概念意义,并对Win32之PE映像 结构有一定了