Mcrosoft中间语言的主要特征
Mcrosoft中间语言显然在.NET FrameWork中起着非常重要的作用。现在讨论一下IL(Intermideate Language)的主要特征。因为面向.NET的所有语言在逻辑上都需要支持IL的主要特征。
下面是中间语言IL的主要特征:
- 面向对象和使用接口
- 值类型和引用类型之间的显著差异
- 强类型数据化
- 使用异常来处理错误
- 使用特性(arrtribute)
1、面向对象和接口的支持
.NET的语言无关性还有一些实际的限制。中间语言在设计时就打算实现某些特殊的编程方法,这表示面对它的余元必须与编程方法兼容,Microsoft为IL选择的特定道路是传统的面向对象的编程,带有类的单一继承性。
除了传统的面向对象编程外,中间语言还引入了接口的概念,在带有COM的Windows下第一次实现了接口。用.NET建立的接口与COM接口不同,他们不需要支持任何COM基础结构。例如,它们不是派生自IUnknown,也没有对应的GUID。但它们与COM接口共享下述理念:提供一个契约,实现给定接口的类必须提供该接口指定的方法和属性的实现方式。
2、不同的值类型和引用类型
与其他的编程语言一样,中间语言提供了许多预定义的基本数据类型。它的一个特性是值类型和引用类型之间有明显的区别。对于值类型(value type)变量直接存储其数据,而对于引用类型(reference type)变量仅存储地址,对应的数据可以在该地址中找到。
在C++中,使用引用类型类似于通过指针来访问变量,而在Visual Basic中,与引用类型最相似的是对象,Visual Basic 6总是通过引用来访问对象。中间语言也有数据存储的规范:引用类型的实例总是存储在一个名为“托管堆”的内存区域中,值类型一般存储在堆栈中(但如果值类型在引用类型中声明为字段,他们就内联存储在堆中)。
3、强类型数据化
中间语言的一个重要方面是它基于数据类型化。所有的变量都清晰地标记为属于某个特定数据类型。特别是中间语言一般不允许对模糊的数据类型执行任何操作。C++开发人员习惯于在不同类型之间转换指针类型。执行这类操作将极大的提高性能,但破坏了类型的安全性。
尽管强迫实现类型的安全性似乎会降低性能,但在许多情况下,我们从.NEt提供的、依赖于类型安全的服务中获得的好处更多。这些服务包括:
- 语言的互操作性
- 垃圾收集
- 安全性
- 应用程序域
- 语言互操作性中强数据类型化的重要性
如果类派生自其他类,或包含其他类的实例,它就需要知道其他类使用的所有数据类型,这就是强数据类型化非常重要的原因。实际上,过去由于缺少用于指定这类信息的系统,从而成为语言继承和交互操作的真正障碍。
通用类型系统(Common Type System)
此类数据类型问题在.NET中使用通用类型系统得到了解决。CTS定义了可以在中间语言中使用的预定义数据类型们所有面向.NET FrameWork的语言都可以生产最终基于这些类型的编译代码。
CTS不仅指定了基本数据类型,还定义了一个内容丰富的类型层次结构,其中包含设计合理的位置,在这些位置上,代码允许定义它自己的类型。CTS的层次结构反映了中间语言的单一继承的面向对象的方法,如下图所示。

公共语言规范(CLS)
公共语言规范(Comom Language Specification,CLS)和通用类型系统一起确保语言的互操作性。CLS是一个最低标准集,所有面向.NET的编译器都必须支持它。因为IL是一种内涵非常丰富的语言,大多数编译器的编写人员有可能把给定编译器的功能限制为只支持IL和CTS提供的一部分功能。 只要编译器支持已在CLS中定义的内容,这就很不错。
4、通过异常处理错误
.NET提供了一种基础结构,让 面 向.NET的 编译器支持异常处理。特别是它提供了一组.NET类来表示异常,语言的互操作性则允许异常处理代码解释被抛出的异常对象,无论异常处理代码使用什么语言编写,都是这样。 语言的无关性没有体现在 C++和 Java的异常处理中,但在COM的错误处理机制中有一定限度的体现 。
5、特性的使用
.NET支持特性。在.NET中,对特性的革新是可以在源代码中定义自己的自定义特性。这些用户定义的特性将和对应数据类型或方法的元数据放在一起,这对于文档记录十分有效,它们和反射技术一起使用以根据特性执行编程任务。另外,与.NET的语言无关性的基本原理一样,特性也可以在一种语言的源代码中定义,而被用另一种语言编写的代码读取。
Mcrosoft中间语言的主要特征的更多相关文章
- C# 中间语言、CLR、CTS、CLS
c# 中间语言.CLR.CTS.CLS IL中间语言,区分大小写 中间语言的主要特征: 1. 面向 对象和使 用接口 2. 值类型和引 用类 型之间的 显 著差异 3. 强 数据类型化 4. 使 ...
- .net组件技术
.NET是什么? •.NET是一个平台,而不是一种语言. •.NET是Microsoft的用以创建XML Web服务(下一代软件)平台,该平台将信息.设备和人以一种统一的.个性化的方式联系起来. ...
- .NET工程师必须掌握的知识点
Microsoft SQL Server 数据库 一.创建和维护数据库 1.数据库 SQL Server 数据库的组成部分?(参见联机丛书) 如何保证数据库的完整性.安全性.并发性? 数据库设计创建步 ...
- C#基础概念
1. 面向对象的思想主要包括:继承 多态 封装 ● 封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部. ● 继承:子类拥有父类的所有 ...
- C#高级编程 (第六版) 学习 第一章:.Net体系结构
第一章 .Net体系结构 1,公共语言运行库(Common Language Runtime, CLR) .Net Framework的核心是其运行库的执行环境,称为公共语言运行库,或.Net运行库. ...
- 【读书笔记】C#高级编程(一).NET体系结构
写在前面:从业两年来,一直停留在会用的阶段,而没有去仔细思考过为什么这么用,之前也大致扫过<c#高级编程>一书,这次想借一袭脑海中的冲动,再次好好仔细过过这本书,夯实基础,温故知新. 一. ...
- 浅析MSIL中间语言——基础篇
一.开篇 研究MSIL纯属于个人喜好,说在前面MSIL应用于开发的地方很少,但是很大程度上能够帮着我们理解底层的原理,这是我了解MSIL的主要原因.托管代码表示应用程序的方法的功能,它们以微软的中间语 ...
- Thrift架构~thrift中间语言的认识(只有它什么都不是,它才有可能什么都是)
中间语言是我为thrift语言起的名字,呵呵,为什么叫它中间语言呢,其实意思很简单,就是说,它只是一个过程,而不是一个最终的结果,而结果需要这个中间过程的影响,没有中间语言,结果语言也不能产生,在th ...
- 【OOAD】OOP的主要特征
聚合 “虚包含” 不明确组合 “实包含” 明确 抽象(abstract)抽象:抽象是通过特定的实例抽取共同特征以后形成概念的过程.它强调主要特征,忽略次要特征.一个对象是现实世界中一个实体的抽象,一个 ...
随机推荐
- flv 解封装
#include <stdio.h> #include <stdlib.h> #include <string.h> #define DEBUG_INFO type ...
- thinkphp中的配置与读取C方法详解
1.项目公共配置 Conf/config.php 内容如下 <?php /** *项目公共配置 *@package *@author **/ return array( 'LOAD_EXT_CO ...
- A start job is running for /etc/rc.d/rc.local ... ... no limit
/etc/rc.d/rc.local文件中配置了redis随机启动但是没有设置redis启动为守护进程(daemonize yes)导致redis启动后阻塞
- Django的视图层
HttpResquest对象: request属性: /* 1.HttpRequest.GET 一个类似于字典的对象,包含 HTTP GET 的所有参数.详情请参考 QueryDict 对象. 2.H ...
- Python handling an exception
#try...except... try: You do your operations here; ...................... except ExceptionI: If ther ...
- ETL开源工具kettle学习笔记
一 Kettle配置与部署 参考1:http://www.cnblogs.com/limengqiang/archive/2013/01/16/KettleApply1.html 1.下载kettle ...
- 解决oracle11g无法导出空表问题
11G中有个新特性,当表无数据时,不分配segment,以节省空间 解决方法: 1.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segmen ...
- ListBox绑定一个对象
转自原文 C#中ListBox的Items属性是Object对象,如何显示该对象的别名 而真正的则保存在其他的地方 一般是datasource 绑定一个list对象 list 可以是 自定义类型的对象 ...
- Halcon算子之shape_trans,用于变换区域的形状
函数原型:shape_trans(Region : RegionTrans : Type : ) *shape_trans*仍然是区域,smallest_rectangle1可以获得四个角的坐标 函数 ...
- Linux git 关联 github仓库
背景: 由于最近学习Spring cloud docker 一键部署, 需要把github仓库项目, 放在Linux上面启动, (以下位置在/root/目录中执行)步骤, 1:安装 git >y ...