C#基础加强(4)之秒懂IL、CTS、CLS和CLR
IL(Intermediate Language)
中间语言。.Net 平台下不只有 C# 语言,还有 VB.Net、F# 等语言。IL 是程序最终编译的可执行二进制代码(托管代码),类似于 Java 中的 class 字节码文件,也叫中间语言,不同的语言最终都编译成标准的 IL(MSIL),这样在 .Net 平台下不同语言之间的程序集就可以互相调用了。

CTS(Common Type System)
公共类型系统。由于 .Net 平台上的不同语言中的数据类型各不相同,比如整数类型在 VB.Net 中是 Integer ,而 C# 中时 int 。.Net 平台制定了一个公用类型系统(CTS),各个语言编译器把自己语言的类型翻译成 CTS 中的类型。
看如下几个相同功能的示例程序:
internal class Program
{
public static void Main(string[] args)
{
;
Console.WriteLine(i);
}
}
C#
Public Shared Sub Main(ByVal args As String())
Console.WriteLine(num)
End Sub
VB.Net
它们最终编译的 IL 语言都为如下:
.method public hidebysig static void Main(string[] args) cil managed
{
.entrypoint
.maxstack
.locals init (
[] int32 num)
L_0000: nop
L_0001: ldc.i4.s
L_0003: stloc.
L_0004: ldloc.
L_0005: call void [mscorlib]System.Console::WriteLine(int32)
L_000a: nop
L_000b: ret
}
IL

CLS(Common Language Specification)
公共语言规范。不同语言的语法不同,比如定义一个类 A 继承自 类 B,C# 的语法是 Class A : B{} ,而 VB.Net 的语法是 Class A Inherits B 。因此 .Net 平台规定了公共的语言规范(CLS)。

CLR(Common Language Runtime)
公共语言运行时。顾名思义,IL 代码就是由 CLR 驱动运行,而 CLR 类似于 Java 中的 JVM,提供了垃圾回收 GC(Garbage Collection)、JIT(即时编译器)。
值类型变量是放再栈内存中,而引用类型的变量是放置在堆内存,栈内存变量会在方法结束后自动释放,而堆内存中的对象需要 GC 来回收。

C#基础加强(4)之秒懂IL、CTS、CLS和CLR的更多相关文章
- 什么是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT
什么是.NET? 起源:比尔盖茨在2000年的Professional Developers Conference介绍了一个崭新的平台叫作Next Generation Windows Service ...
- 浅谈CLR CTS CLS。。。
So The First Is CLR CLR的全程是Common Language Runtime 公共语言运行时 可以把他理解为包含运行.net程序的引擎 和 一堆符合公共语言基础(CLI)的类 ...
- 什么是CTS、CLS和CLR
CTS.CLS和CLR是.NET框架的基本概念,但往往成为程序员们忽视的部分.清楚理解三者的概念,有助于.NET程序员编写高效安全的.NET程序. 所涉及到的知识点 • .NET的基本概念 • ...
- 第五篇 .NET高级技术之CTS、CLS、CLR
CTS.CLS.CLR 1. .Net平台下不只有C#语言,还有VB.Net.F#等语言.IL是程序最终编译的可以执行的二进制代码(托管代码),不同的语言最终都编译成标准的IL(中间语言,MSIL): ...
- CTS,CLS,CLR解释
问题阐述 CTS.CLS和 CLR分别是什么意思? 专家解答 CTS.CLS和 CLR是.NET框架的 3个核心部分,下面分别对它们进行介绍. (1)CTS CTS即通用类型系统,它定义了如何在.NE ...
- CTS、CLS、CLR
CTS.CLS和CLR是.NET框架的3个核心部分,下面分别对它们进行介绍. 1)CTS Common Type System CTS即通用类型系统,它定义了如何在.NET Framework运行库 ...
- CTS、CLS、CLR分别作何解释?
CTS.CLS.CLR分别作何解释? 答:CTS:通用类型系统.CLS:通用语言规范.CLR:公共语言运行库.
- C#中IL, CTS, CLR, CLS, JIT含义
1. IL/MSIL (Microsoft Intermediate Language) 微软中间语言 (IL是MSIL的缩写,译为中间语言) 2. CTS (Common Type System ...
- “菜”鸟理解.NET Framework(CLI,CLR,CTS,CLS,BCL,FCL)
既然要学.NET,就要先认识认识她,我不喜欢大段大段文字的东西,自己通过理解,画个图,来看看.NET的沉鱼落雁,闭月羞花之容. 最下层蓝色部分是.NET Framework的基础,也是所有应用软件的基 ...
随机推荐
- rm -rf python 实现 v0.1
#coding=utf- import os def join(arr,join_falg): res = "" for a in arr: res += a+join_falg ...
- Web API 异常处理
Web Api的ExceptionFilter只能截获并处理Action执行过程中发生的异常,在Action执行过程之外如果出现异常,ExceptionFilter是无能为力的. 这些异常包括: 1. ...
- 外盘持仓盈亏何时推送---ITapTradeAPINotify::OnRtnPositionProfit
易盛外盘提供了一个可以直接获取持仓盈亏的函数,这个比CTP方便多了 virtual void TAP_CDECL ITapTrade::ITapTradeAPINotify::OnRtnPositio ...
- elasticsearch 二、elasticsearch-head安装
简介 elastricsearch-head是用于elasticsearch群集浏览和交互的插件. 源码:https://github.com/mobz/elasticsearch-head (上图来 ...
- Java源码阅读的真实体会(一种学习思路)
Java源码阅读的真实体会(一种学习思路) 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈 ...
- QtCreator pro中相对路径和debug文件夹下未放动态库时调试报QtCreator:during startup program exited with code 0xc0000135错误
QtCreator pro中相对路径一般是以pro文件(非main函数所在文件)所在的当前目录为起点,用$$PWD表示. 如头文件和库文件 INCLUDEPATH +=$$PWD/inc win32 ...
- 危险代码:如何使用Unsafe操作内存中的Java类和对象
危险代码:如何使用Unsafe操作内存中的Java类和对象—Part1 危险代码:如何使用Unsafe操作内存中的Java类和对象—Part2 危险代码:如何使用Unsafe操作内存中的Java类和对 ...
- JS中常用的Math方法
1.min()和max()方法 Math.min()用于确定一组数值中的最小值.Math.max()用于确定一组数值中的最大值. alert(Math.min(2,4,3,6,3,8,0,1,3)); ...
- 净资产收益率ROE连续3年超过15%的股票排名
R连续3年,12个季度的滚动ROE,都超过15%的股票排名,个股滚动ROE = 最近4个季度的归母净利润 / ((期初归母净资产 + 期末归母净资产) / 2). 查看更多ROE连续3年超过15% ...
- Kafka获取订阅某topic的所有consumer group【客户端版】
之前写过如何用服务器端的API代码来获取订阅某topic的所有consumer group,参见这里.使用服务器端的API需要用到kafka.admin.AdminClient类,但是这个类在0.11 ...