还是啰嗦下:文章短并不代表文章质量不高。我最喜欢用干货性的以及总结性的语言 让大家明白文章要表达的内容。这一切,都是来自多年对.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. SpringBoot - 实现文件上传1(单文件上传、常用上传参数配置)

    Spring Boot 对文件上传做了简化,基本做到了零配置,我们只需要在项目中添加 spring-boot-starter-web 依赖即可. 一.单文件上传 1,代码编写 (1)首先在 stati ...

  2. ogn1.MethodFailedException:Method "xxx" failed for object xxx

    问题描述:初学ssh写了个小项目,访问界面出现以下错误 java. lang. NoSuchllethodError: org. hi bernate. SessionF actory. openSe ...

  3. IDLE怎么将主题修改成Darcula样式?

    摘要:每个人都有自己心中理想的编辑器主题,我更倾向于Darcula,你们呢? 想必没用过Darcula主题的朋友,会好奇它是何方神圣?   是不是很赏心悦目,代码这冰冷的东西也变得生龙活虎? 我最近在 ...

  4. hdu5531 Rebuild

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submissi ...

  5. Codeforces Round #650 (Div. 3) C. Social Distance (前缀和)

    题意:有一排座位,要求每人之间隔\(k\)个座位坐,\(1\)代表已做,\(0\)代表空座,问最多能坐几人. 题解:我们分别从前和从后跑个前缀和,将已经有人坐的周围的位置标记,然后遍历求每一段连续的\ ...

  6. Detect the Virus ZOJ - 3430 AC自动机

    One day, Nobita found that his computer is extremely slow. After several hours' work, he finally fou ...

  7. Cell 动态行高文字显示不全问题探索

    目录 问题概述 一.新建工程 二.尝试复现问题 尝试解决 修改contentLblBtmCon优先级为High(750) 修改contentLblBtmCon优先级为Low(250) 小结 其他解决思 ...

  8. TextCNN论文解读

    引言 本文是对<Convolutional Neural Networks for Sentence Classification>的原理解读,简称TextCNN. 作者提出了一种基于CN ...

  9. 编写一个c函数,该函数给出一个字节中被置为1的位的个数

    请编写一个c函数,该函数给出一个字节中被置为1的位的个数 #include <stdio.h> void fun(char ch) { int i; int temp; int count ...

  10. JSON简单理解

    JSON 与 JS 对象的关系 很多人搞不清楚 JSON 和 Js 对象的关系,甚至连谁是谁都不清楚.其实,可以这么理解: JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息 ...