还是啰嗦下:文章短并不代表文章质量不高。我最喜欢用干货性的以及总结性的语言 让大家明白文章要表达的内容。这一切,都是来自多年对.NET 的一些领悟以及一些理解。

不长篇大论,一本人也没时间,二本人也不想浪费大家宝贵的时间。

微软的 C# , IL,CLR,以及 Cup 之间的关系,网络上的文章很多,一些朋友看了一大堆也没看出所以然。一些文章 讲他们之间的关系,但是看了整篇文章都在阐述CLR 的内在原理。

我这里旨在用最简单的表述帮助大家理解他们之间的关系。

NOTIC START---开始:

C#:    是上层语言,也就是我们.NET 工作人员码代码的语言

IL:     是怎么形成的呢,IL 就是C# 通过宇宙级工具VS 编译后 存储的代码。并不是最终交由CUP 执行的代码,因此IL 更是一种编译后的文件代码,那么IL 存放在哪里呢 ,答案:EXE/DLL

CLR:   中间执行者。当程序运行时,CLR 将 IL 加载到进程管理,并将IL 解析成 针对性的 二进制的指令交由CUP 执行

CUP:最终执行者。

 

从编写代码到最终平台运行:

可执行文件: C#——>VS Compiler——>exe/dll(IL和Metadata)——>Runtime Engine(Class Loader)——>JIT Compiler——>Managed Native Code——>运行——>安全验证

如果是类库Class Library(IL和Metadata)则跳过Class Loader,直接进入JIT

那大家还会问:  那我们常见还有 .NET 领域常说的 CTS,CLS 

1:CTS: 是.NET 编译器工作的 重要的组成部分,你理解成它参与了c# 编译成 IL 的编译工作;

但是CTS 在定义范围上指定是: 通用类型系统, 从定义上看它主要参与的是编译工作的类型转换问题。

下面给出 CTS 在编译 工作中的作用:

  • 不仅可以把C#编译成.Net IL,还支持Basic、Python、Ruby等语言,甚至还支持Java。不同语言中的数据类型定义是不一样的,.Net中定义了通用的数据类型(CTS,Common Type System):String、Int16、Int32、Int64、Boolean、Double。通过转到定义可以看到这些都是类(结构体)。
  • Int64→long、Int32→int、Int16→short、String→string、Boolean→bool。每种语言都定义了自己的类型,.Net通过 CTS提供了公共的类型,然后翻译生成对应的.Net类型。
  • C#语言规范中定义了string、int、long、bool、double等原始类型,编译器会把这些类型翻译成CTS中的类。反编译看IL就能看到了。
  • string是c#中的类,string是.net Framework CTS的类
  • c# string映射为.net Framework的String 如果用string,编译器会把它编译成String,所以如果直接用String就可以让编译器少做一点点工作 如果使用c#,建议使用string,比较符合规范。

2: CLS : 白话文说白了 就是 定义了 C# 以及 VB 等的 语言规范。

CLS 的作用很常见, 举个例子,例如我们定义一个类 ConvertToLower(string message) 的方法,然后我们在 例外一个类中调用的这个方法,然而,我们在例外一个地方调用的时候,不小心把 大写的 ConvertToLower 写成了 小写的  converttolower  这时候,VS 将会提示,因为C# 语言对大小时敏感的。但是,在VB 语言中,大写又不是敏感的,这些性质有谁决定,是有CLS 系统决定的。

不知我这样解释大家明白了吗,希望对大家有帮助。

干货扩展联想:

我们知道 IL 直接 交由 CLR  加载到运行内存中. 那么我们是否思考下,如果我的应用程序在运行过程中,我可否动态构建 IL 代码(也就是动态构建一个类),在运行时交由CLR 执行,那不是很强大。这个课题留个大家思考!

-----给大家提供一些思路:微软这个强大的帝国早就为我们做好这些事情,大家去了解下 微软 的这个类库,就明白了,我这边就不做长篇大论了:  System.Reflection.Emit.

(嘎吧)--微软的 C# , IL,CLR, Cup 之间关系以及扩展联想的更多相关文章

  1. SimpleSocket

    项目地址 :  https://github.com/kelin-xycs/SimpleSocket SimpleSocket 一个 用 C# 调用 Win Socket 2 的 程序 , 对 Win ...

  2. C#中IL, CTS, CLR, CLS, JIT含义

    1. IL/MSIL  (Microsoft Intermediate Language) 微软中间语言 (IL是MSIL的缩写,译为中间语言) 2. CTS  (Common Type System ...

  3. CLR 的执行模型(2)

    第一章 CLR 的执行模型(2) 本篇内容大纲 Framework 类库(Framework Class Library , FCL) 通用类型系统(Common Type System,CTS) 公 ...

  4. CLR、CLS、CTS概述

    在学习.NET的过程中,都会不可避免地接触到这三个概念,那么这三个东西是什么以及它们之间的关系是怎样的呢?任何编程语言,如果想要在.NET CLR上执行,就必需提供一个编译器,将此语言的程序编译成.N ...

  5. C# 多线程学习系列三之CLR线程池系列之ThreadPool

    一.CLR线程池 1.进程和CLR的关系一个进程可以只包含一个CLR,也可以包含多个CLR2.CLR和AppDomain的关系一个CLR可以包含多个AppDomain3.CLR和线程池的关系一个CLR ...

  6. 微软软件开发技术二十年回顾-.NET框架篇

    六. .NET框架篇 .NET是微软自从发布Windows 3.0以来最为激动人心的新技术,是微软战略上为下一个十年对服务器和桌面软件工程的第一步,是微软的一场世纪大豪赌.对于.NET,微软的定义是, ...

  7. CLR via C# 序列化读书笔记

    1. 序列化格式类 a. 二进制BinaryFormatter b. XML流 NetDataContractSerializer c. CLR类据类型与非CLR数据类型之间互操作 XmlSerial ...

  8. 微软Office与金山WPS Office有何私密关系?

    新浪科技讯,9月1日午间消息,国家工商总局在其官网公布消息称.对微软公司副总裁陈实进行反垄断调查询问,要求微软就其综合情况以及企业反映的微软公司Windows操作系统和Office办公软件相关信息没有 ...

  9. C# 在腾讯的发展(作者是微软连续10年的MVP)

    本文首发我的微信公众号"dotnet跨平台", 内容得到大家热烈的欢迎,全文重新发布在博客,欢迎转载,请注明出处. .NET 主要的开发语言是 C# , .NET 平台泛指遵循EC ...

随机推荐

  1. dedecms万能SQL标签使用方法大全

    注意:dede_archives这是系统默认的数据库表,如果你修改过表前缀dede_,请自行更改表名.在以下示例的标签中,有一部分只写出了SQL语句,具体的完整标签写法请参考:织梦SQL标签调用方法. ...

  2. java封装详解

    三大特性之---封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能 ...

  3. cassandra权威指南读书笔记--Cassandra架构(1)

    结构 集群-->数据中心-->机架-->节点. cassandra尽可能将数据副本存在多个数据中心,然后读取(查询路由到)尽可能在本地数据中心. 为了去中心化和分区容错性,使用gos ...

  4. 原生js拖拽功能制作滑动条实例教程

    拖拽属于前端常见的功能,很多效果都会用到js的拖拽功能.滑动条的核心功能也就是使用js拖拽滑块来修改位置.一个完整的滑动条包括 滑动条.滑动痕迹.滑块.文本 等元素,先把html代码写出来,如下所示: ...

  5. mac外接键盘HOME,END键问题

    参考: How to Fix the Home and End Buttons for an External Keyboard in Mac mac老用户应该都知道, MAC自带的键盘的 cmd+左 ...

  6. HDU - 6761 Minimum Index (字符串,Lyndon分解)

    Minimum Index 题意 求字符串所有前缀的所有后缀表示中字典序最小的位置集合,最终转换为1112进制表示.比如aab,有三个前缀分别为a,aa,aab.其中a的后缀只有一个a,位置下标1:a ...

  7. Codeforces Global Round 9 B. Neighbor Grid

    题目链接:https://codeforces.com/contest/1375/problem/B 题意 给出一个 $n \times m$ 的方阵,每个方格中有一个非负整数,一个好方格定义如下: ...

  8. HDU6434 Count【欧拉函数 线性筛】

    HDU6434 I. Count T次询问,每次询问\(\sum_{i=1}^{n}\sum_{j=1}^{n-1}[gcd(i-j,i+j)=1]\) \(T\le 1e5, n \le 2e7\) ...

  9. 1562: Fun House

    Description American Carnival Makers Inc. (ACM) has a long history of designing rides and attraction ...

  10. python中schedule模块的简单使用 || importlib.import_module动态导入模块

    1 import schedule 2 import time 3 4 def start(): #定义一个函数 5 print("****") 6 7 8 if __name__ ...