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)抽象:抽象是通过特定的实例抽取共同特征以后形成概念的过程.它强调主要特征,忽略次要特征.一个对象是现实世界中一个实体的抽象,一个 ...
随机推荐
- windows10 vs2015编译 带nginx-rtmp-module 模块的32位nginx
1 下载必要软件 从 http://xhmikosr.1f0.de/tools/msys/下载msys:http://xhmikosr.1f0.de/tools/msys/MSYS_MinGW-w6 ...
- java代码数组求平均值,最大值,最小值
(测试类) package com.badu; public class Tste { public static void main(String[] args) { Class5 sa=new C ...
- Mysql无法创建外键的原因 !!!
在MySQL中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因. 1. 两个字段的类型或者大小不严格匹配.例如,如果一个 ...
- 学习:Dom4j和Xpath
1.DOM4J简介 DOM4J是 dom4j.org 出品的一个开源 XML 解析包.DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和JAXP. DOM4J使 ...
- MySQL 加快导入数据
1.临时关闭binlog,避免写入日志 set sql_log_bin = off: mysql> show VARIABLES like '%log_bin%'; +------------- ...
- questions information
1. 面向对象 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 三大特性: 封装: -- 将内容封装到对象中 -- 将方法疯 ...
- 使用wifi网卡笔记3---工具wpa_supplicant(STA模式)
1. wpa_supplicant介绍 supplicant是恳求者的意思,是wpa的发起者,是发送认证请求的设备(手机),手机--AP--认证服务器,可用于上述4种"认证/加密" ...
- 安装NFS服务,并挂载到开发板
1.前言 由于嵌入式linux开发大多数使用的是交叉编译环境,难免很频繁的将文件在开发板和PC环境之间传递,最方便的当然是网络传递了,可以使用FTP,以及挂载NFS两种方式了,显然后者更为方便了. 2 ...
- Docker学习总结(二)—— 镜像,容器
1.Docker镜像 1.1相关概念:registry :用于保存Docker镜像,包括镜像层次结构和镜像元数据,类似于git仓库之类的实体. repository:某个Docker镜像所有迭代版本 ...
- fir 窗口设计法
加窗的原因.对于理想的低通滤波器H(exp(jw)),其h(n)是无限长序列.这是可以证明的.因此为了得到有限长的h(n)就需要截断,而这个过程就是加窗.由于h(n)截断即其频率响应就和理想的低通滤波 ...