(嘎吧)--微软的 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 ...
随机推荐
- php 7.4 vcruntime140.dll not compatible with PHP
安装PHP7.4以上版本时,在运行PHP时会提示如下: PHP Warning: 'vcruntime140.dll' 14.0 is not compatible with this PHP bui ...
- c++11新特性实战(二):智能指针
c++11添加了新的智能指针,unique_ptr.shared_ptr和weak_ptr,同时也将auto_ptr置为废弃(deprecated). 但是在实际的使用过程中,很多人都会有这样的问题: ...
- CF-1332 F. Independent Set
F. Independent Set 题意 一颗 n 个节点的树,求出每个\(edge-induced~subgraph\)的独立集个数之和. \(edge-induced~subgraph\)含义是 ...
- CF 1400F x-prime Substrings 题解【AC自动机+DP】
CF 1400F.x-prime Substrings 题意: 给定一个由\('1'\)到\('9'\)组成的字符串\(s\)和一个数\(x\),定义一个串为\(x-prime\)串,当且仅当这个串上 ...
- 8.PowerShell DSC之Push
前言 LCM的默认mode就是push,所以对于push模式,我们直接就三步走 以下是示例: 1.编写配置 Authoring Configuration WebsiteTest { # Import ...
- 2019牛客多校第三场F Planting Trees(单调队列)题解
题意: 求最大矩阵面积,要求矩阵内数字满足\(max - min < m\) 思路: 枚举上下长度,在枚举的时候可以求出每一列的最大最小值\(cmax,cmin\),这样问题就变成了求一行数,要 ...
- 惠普机械键盘 K10GL 使用评测
惠普机械键盘 GK100 使用评测 手感太差,不是 RGB 背光 惠普(HP) K10GL 机械键盘 有线 LED背光机械键盘 87键 混光青轴 refs https://item.jd.com/10 ...
- React tutorial
https://www.algolia.com Build Unique Search ExperiencesHosted Search API that delivers instant and r ...
- HTTP vs HTTP/2 vs HTTP/3 (QUIC)
HTTP vs HTTP/2 vs HTTP/3 (QUIC) Nginx HTTP/1.1 HTTP/2 HTTP/3 (QUIC) HTTPS 计算机网络协议 OSI 协议簇 (7) TCP/IP ...
- color recognition by image
color recognition by image 通过图像进行颜色识别 https://imagecolorpicker.com/ unknown color origin pic grey bl ...