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提供的、依赖于类型安全的服务中获得的好处更多。这些服务包括:

  • 语言的互操作性
  • 垃圾收集
  • 安全性
  • 应用程序域
  1. 语言互操作性中强数据类型化的重要性

如果类派生自其他类,或包含其他类的实例,它就需要知道其他类使用的所有数据类型,这就是强数据类型化非常重要的原因。实际上,过去由于缺少用于指定这类信息的系统,从而成为语言继承和交互操作的真正障碍。

通用类型系统(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中间语言的主要特征的更多相关文章

  1. C# 中间语言、CLR、CTS、CLS

    c#  中间语言.CLR.CTS.CLS IL中间语言,区分大小写 中间语言的主要特征: 1.  面向 对象和使 用接口 2. 值类型和引 用类 型之间的 显 著差异 3.  强 数据类型化 4. 使 ...

  2. .net组件技术

    .NET是什么? •.NET是一个平台,而不是一种语言. •.NET是Microsoft的用以创建XML Web服务(下一代软件)平台,该平台将信息.设备和人以一种统一的.个性化的方式联系起来.   ...

  3. .NET工程师必须掌握的知识点

    Microsoft SQL Server 数据库 一.创建和维护数据库 1.数据库 SQL Server 数据库的组成部分?(参见联机丛书) 如何保证数据库的完整性.安全性.并发性? 数据库设计创建步 ...

  4. C#基础概念

    1.     面向对象的思想主要包括:继承 多态 封装 ●       封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部. ●       继承:子类拥有父类的所有 ...

  5. C#高级编程 (第六版) 学习 第一章:.Net体系结构

    第一章 .Net体系结构 1,公共语言运行库(Common Language Runtime, CLR) .Net Framework的核心是其运行库的执行环境,称为公共语言运行库,或.Net运行库. ...

  6. 【读书笔记】C#高级编程(一).NET体系结构

    写在前面:从业两年来,一直停留在会用的阶段,而没有去仔细思考过为什么这么用,之前也大致扫过<c#高级编程>一书,这次想借一袭脑海中的冲动,再次好好仔细过过这本书,夯实基础,温故知新. 一. ...

  7. 浅析MSIL中间语言——基础篇

    一.开篇 研究MSIL纯属于个人喜好,说在前面MSIL应用于开发的地方很少,但是很大程度上能够帮着我们理解底层的原理,这是我了解MSIL的主要原因.托管代码表示应用程序的方法的功能,它们以微软的中间语 ...

  8. Thrift架构~thrift中间语言的认识(只有它什么都不是,它才有可能什么都是)

    中间语言是我为thrift语言起的名字,呵呵,为什么叫它中间语言呢,其实意思很简单,就是说,它只是一个过程,而不是一个最终的结果,而结果需要这个中间过程的影响,没有中间语言,结果语言也不能产生,在th ...

  9. 【OOAD】OOP的主要特征

    聚合 “虚包含” 不明确组合 “实包含” 明确 抽象(abstract)抽象:抽象是通过特定的实例抽取共同特征以后形成概念的过程.它强调主要特征,忽略次要特征.一个对象是现实世界中一个实体的抽象,一个 ...

随机推荐

  1. 【Leetcode 371】Sum of Two Integers

    问题描述:不使用+是或-操作符进行整数的加法运算 int getSum(int a, int b); 我的思路:把整数化成二进制进行运算,注意类型是int,也就是要考虑负数.关于负数的二进制表示可见之 ...

  2. 关于硬件实现FFT逆运算

    前面的文章我们介绍了关于FFT的硬件实现.关于FFT的逆运算IFFT,其实就是将实现FFT的过程反过来执行就可以了. 在实现过程中要注意很多问题. 同 FFT一样,效率问题.以2048点为例,根据理论 ...

  3. HBase之五:hbase的region分区

    一.Region 概念 Region是表获取和分布的基本元素,由每个列族的一个Store组成.对象层级图如下: Table (HBase table) Region (Regions for the ...

  4. 北京师范大学第十六届程序设计竞赛决赛 C萌萌哒身高差

    链接:https://www.nowcoder.com/acm/contest/117/C来源:牛客网 萌萌哒身高差 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他 ...

  5. JNI的一个简单实例

    本例子使用的操作系统MacOS, 64位JVM. JNI编写的几个步骤如下: 编写Java代码,并注明native方法: public class HelloJni { public native v ...

  6. 安装SQL Servre2000时提示“command line option syntax error! type command /? for help”

    问题: 当程序正在安装ms数据访问组件时,弹出错误提示框:command line option syntax error,type command/? for help,点击确定继续:到了程序正在安 ...

  7. 硬盘IOPS与读写速度

    IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一.IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求 ...

  8. Tkinter按钮(Button)

    Python - Tkinter Button按钮组件是用来添加一个Python应用程序中的按钮.这些按钮可以显示文字或图像,表达按钮的目的.当你按一下按钮时,您可以附加到一个按钮的函数或方法,该方法 ...

  9. 10_java之继承和抽象类

    01继承的概述 *A:继承的概念 *a:继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系 *b:在Java中,类的继承是指在一个现有类的基础上去构建一个新的类, 构建出来的新 ...

  10. delphi BLE 学习

    TBluetoothLE 控件 TBluetoothLE.FManager: TBluetoothLEManager; class constructor TBluetoothLEManager.Cr ...