(嘎吧)--微软的 C# , IL,CLR, Cup 之间关系以及扩展联想
还是啰嗦下:文章短并不代表文章质量不高。我最喜欢用干货性的以及总结性的语言 让大家明白文章要表达的内容。这一切,都是来自多年对.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 之间关系以及扩展联想的更多相关文章
- SimpleSocket
项目地址 : https://github.com/kelin-xycs/SimpleSocket SimpleSocket 一个 用 C# 调用 Win Socket 2 的 程序 , 对 Win ...
- C#中IL, CTS, CLR, CLS, JIT含义
1. IL/MSIL (Microsoft Intermediate Language) 微软中间语言 (IL是MSIL的缩写,译为中间语言) 2. CTS (Common Type System ...
- CLR 的执行模型(2)
第一章 CLR 的执行模型(2) 本篇内容大纲 Framework 类库(Framework Class Library , FCL) 通用类型系统(Common Type System,CTS) 公 ...
- CLR、CLS、CTS概述
在学习.NET的过程中,都会不可避免地接触到这三个概念,那么这三个东西是什么以及它们之间的关系是怎样的呢?任何编程语言,如果想要在.NET CLR上执行,就必需提供一个编译器,将此语言的程序编译成.N ...
- C# 多线程学习系列三之CLR线程池系列之ThreadPool
一.CLR线程池 1.进程和CLR的关系一个进程可以只包含一个CLR,也可以包含多个CLR2.CLR和AppDomain的关系一个CLR可以包含多个AppDomain3.CLR和线程池的关系一个CLR ...
- 微软软件开发技术二十年回顾-.NET框架篇
六. .NET框架篇 .NET是微软自从发布Windows 3.0以来最为激动人心的新技术,是微软战略上为下一个十年对服务器和桌面软件工程的第一步,是微软的一场世纪大豪赌.对于.NET,微软的定义是, ...
- CLR via C# 序列化读书笔记
1. 序列化格式类 a. 二进制BinaryFormatter b. XML流 NetDataContractSerializer c. CLR类据类型与非CLR数据类型之间互操作 XmlSerial ...
- 微软Office与金山WPS Office有何私密关系?
新浪科技讯,9月1日午间消息,国家工商总局在其官网公布消息称.对微软公司副总裁陈实进行反垄断调查询问,要求微软就其综合情况以及企业反映的微软公司Windows操作系统和Office办公软件相关信息没有 ...
- C# 在腾讯的发展(作者是微软连续10年的MVP)
本文首发我的微信公众号"dotnet跨平台", 内容得到大家热烈的欢迎,全文重新发布在博客,欢迎转载,请注明出处. .NET 主要的开发语言是 C# , .NET 平台泛指遵循EC ...
随机推荐
- windows下使用HyperV安装Centos7虚拟机
以前都是用的VM(VMWare)安装虚拟机, 然鹅, 现在电脑装了Docker需要开启Windows的HyperV, 而我使用的VM版本(14)和HyperV 是不兼容的, 于是搜索引擎搜索了一下解决 ...
- left join与inner join
举例a.b表: bId bNum 1 20 2 30 aId aNum 1 10 2 20 3 30 left join以左表为准 select * from a left join b on a.a ...
- 2019 沈阳网络赛 D Fish eating fruit ( 树形DP)
题目传送门 题意:求一颗树中所有点对(a,b)的路径长度,路径长度按照模3之后的值进行分类,最后分别求每一类的和 分析:树形DP \(dp[i][j]\) 表示以 i 为根的子树中,所有子节点到 i ...
- Codeforces Round #626 (Div. 2) D. Present(位运算)
题意: 求n个数中两两和的异或. 思路: 逐位考虑,第k位只需考虑0~k-1位,可通过&(2k+1-1)得到一组新数. 将新数排序,当两数和在[2k,2k+1)和[2k+1+2k,2k+2)之 ...
- POJ - 3376 Finding Palindromes(拓展kmp+trie)
传送门:POJ - 3376 题意:给你n个字符串,两两结合,问有多少个是回文的: 题解:这个题真的恶心,我直接经历了5种错误类型 : ) ... 因为卡内存,所以又把字典树改成了指针版本的. 字符串 ...
- Codeforces Round #681 (Div. 1, based on VK Cup 2019-2020 - Final) B. Identify the Operations (模拟,双向链表)
题意:给你一组不重复的序列\(a\),每次可以选择一个数删除它左边或右边的一个数,并将选择的数append到数组\(b\)中,现在给你数组\(b\),问有多少种方案数得到\(b\). 题解:我们可以记 ...
- 错误: 未能完成程序集的安装(hr = 0x8007000b)。探测终止。
解决方案:VS中"工具"->"选项"->"Web项目"->"对网站和项目使用IIS Express的64位版& ...
- rabbitmq学习二
rabbitmq的六种工作模式: 这里简单介绍下六种工作模式的主要特点: 简单模式:一个生产者,一个消费者 work模式:一个生产者,多个消费者,每个消费者获取到的消息唯一. 订阅模式:一个生产者发送 ...
- OpenStack Train版-5.安装nova计算服务(控制节点)
nova计算服务需要在 控制节点 和 计算节点 都安装 控制节点主要安装 nova-api(nova主服务) nova-scheduler(nova调度服务) nova-conductor(n ...
- windows7 更新失败,无法开机处理方法
记录一次今天同事笔记本无法开机的故障处理 windows7系统,安装更新失败,无法开机,卡在配置更新界面 处理方法,强制关机,开机按F8,进入安全模式,安全模式还会卡在配置更新界面,但是卡一会会进入系 ...