记得歌手陈琳曾经在1993年发行了第一张专辑《你的柔情我永远不懂》,创造了150万张的销售纪录,里边的主打歌——我的柔情你永远不懂,多年以后才发现是写给C#运行原理的,因为原理总是伤不起~
你的柔情我永远不懂
我无法把你看得清楚
你的柔情我永远不懂
感觉进入了层层迷雾
你的柔情我永远不懂
雾中的梦想不是归宿
你的柔情我永远不懂
我等待着那最后孤独
没有心思看你装糊涂
 ......
这个你,我想换做C#运行原理更合适吧,呵呵,我不得不说,没有一点点防备,你就存在了我深深的脑海里...
 
说到原理这东西,一直都很头大,什么通信原理,自控原理,编译原理,微机原理,伤人的原理是无处不在啊,我们在学校的时候恐怕对这个吐槽的最多了,因为原理这玩意,我们玩不起啊,连教授都没搞明白,你还想咋着,所以这里的原理也是蜻蜓点水而已!
 
我一直在想计算机是属于什么民族的,后来一想应该是土著人,为什么呢,因为老土著只会讲自己的语言,也只懂他们自己的语言,那计算机还不一个德行,就看见机器语言才会两眼放光,什么0101的,你也拿它没辙,反正人家就懂机器语言,而我等程序猿只懂高级语言啊,什么JAVA、C#、C++了,没办法计算机就是不认识啊,那找个翻译应该可以吧,你还别说真有,有个叫做“编译器”的翻译,瞬间就把C#等转换成0101了,我和我的小伙伴们都惊呆了!
 
编译器把0101以文件的形式保存在外存储器中,CPU执行程序时,要把指令读到内存中(你不用担心,是OS搞定的),这些指令都是一条条放好的,然后CPU就是一条条取出执行即可,但是这个指令还是有问题的,为啥?因为CPU和OS一换,瞬间这些指令又变成天书了,他们也有个名字“非托管代码”,没托管的代码伤不起啊!
 
write once ,run everywhere!听过吧,这还真不是吹牛,搞java的最有发言权了,那微软也是不敢示弱的,这套思想他也领会了,而且更强大一点!要支持跨平台和跨语言这一特性,软件工程师写的程序经过编译器生成的结果就不能是依赖于操作系统和计算机硬件的机器指令了,而必须是一种中间的、在所有操作系统和计算机硬件平台上都能执行的代码,这种代码Java称之为ByteCode(字节码),.NET称之为MSIL(微软中间语言)。程序最终还是要靠CPU执行,所以,Java的ByteCode和.NET的MSIL仍然需要最终被翻译成CPU能执行的机器指令,这部分功能由一个运行在特定操作系统之上的软件系统来完成,这个软件系统称为VM(Virtual Machine,虚拟机)。只需要为每种操作系统和特定的硬件平台提供一个虚拟机,就可以让同样一个程序不加修改地在不同的操作系统和硬件结构的计算机上运行。
 
那我们的.NET的虚拟机就是CLR!你只要装了这个东东,原则上是可以跨平台的!这种运行在CLR上面的代码就是托管代码,你开发的.NET程序,没有这个CLR的支持,你就运行不了,而要有CLR,你就必须装.NET FrameWork这个实实在在的东东,这个东东才是.NET 的核心!
 
在.NET中,我们还可以在一个程序里边使用多种语言,这依赖于CTS,比如VB和C#,反正最后都是编程MSIL,这个貌似java没有哦,所以搞.NET的也算是搬回了一局啊!
 
值得一提的是,虽然微软自己并不提倡跨平台(跨平台会影响Windows操作系统的市场垄断),但现在已经出现了在Linux操作系统中运行和编辑.NET程序的平台,就是Mono平台。 该平台包括有C#编译器、公共语言运行时以及相关的一套.NET类库,Mono平台可使开发者开发的.NET应用程序不仅能在Windows上运行,也能在任何支持Mono的操作系统上运行,包括现有的Linux和UNIX操作系统。在Linux下运行的.NET Framework称为MONO,这是一个开源的软件项目,你可以到因特网上搜集它的信息!
 
若要深入理解,有两本书推荐:1、《你必须知道的.NET》 2、《CLR via C#》
 
 
 
 
 

C#运行原理——我的柔情你永远不懂的更多相关文章

  1. Flink 集群运行原理兼部署及Yarn运行模式深入剖析

    1 Flink的前世今生(生态很重要) 原文:https://blog.csdn.net/shenshouniu/article/details/84439459 很多人可能都是在 2015 年才听到 ...

  2. 比特币运行原理[z]

    https://baijiahao.baidu.com/s?id=1581755535769652543&wfr=spider&for=pc 这篇文章主要讲解比特币是什么?它的运行原理 ...

  3. 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制

    [原创]分布式之数据库和缓存双写一致性方案解析(三)   正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...

  4. Hadoop运行原理总结(详细)

    本编随笔是小编个人参照个人的笔记.官方文档以及网上的资料等后对HDFS的概念以及运行原理进行系统性地归纳,说起来真的惭愧呀,自学了很长一段时间也没有对Hadoop知识点进行归纳,有时候在实战中或者与别 ...

  5. iis6.0与asp.net的运行原理

    这几天上网翻阅了不少前辈们的关于iis和asp.net运行原理的博客,学的有点零零散散,花了好长时间做了一个小结(虽然文字不多,但也花了不少时间呢),鄙人不才,难免有理解不道的地方,还望前辈们不吝赐教 ...

  6. ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)

    ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件) Startup Class 1.Startup Constructor(构造函数) 2.Configure ...

  7. ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行

    ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行 核心框架 ASP.NET Core APP 创建与运行 总结 之前两篇文章简析.NET Core 以及与 .NET Framew ...

  8. 场景9 深入RAC运行原理

    场景9 深入RAC运行原理 OPS(Oracle Parallel Server)通过磁盘的节点判定数据是否最新   —>   Data Guard   —>    RAC(Real Ap ...

  9. Camel运行原理分析

    Camel运行原理分析 以一个简单的例子说明一下camel的运行原理,例子本身很简单,目的就是将一个目录下的文件搬运到另一个文件夹,处理器只是将文件(限于文本文件)的内容打印到控制台,首先代码如下: ...

随机推荐

  1. SpringMVC完成文件上传的基本步骤

    1.修改form表单的提交方式 2.将文件存入磁盘 3.配置视图解析器 1).前端文件 --需要在form表单中添加 enctype="multipart/form-data"属性 ...

  2. PLSQL的注释技巧

    概述 这里提供一些注释的技巧,用来模仿Java中的文档注释的功能. 在Eclipse中,鼠标悬浮在类或其成员上,会显示相关的文档注释:在PL/SQL中也有类似的功能,我们需要掌握一些注释技巧,让其可读 ...

  3. python3.6下安装结巴分词需要注意的地方

    近期,在安装结巴分词的时候遇到一些问题,纠结了好一阵,跟大家分享下,希望能有所帮助.先说下安装环境: windows7, 64位系统 python3.6,python3.5在结巴分词的官方github ...

  4. 【SAM】codevs3160-最长公共子串

    [题目大意] 求两个字符串的最长公共子串. [思路] 对第一个字符串建立后缀自动机,第二个字符串去匹配.cnt记录当前最长公共子串的长度,而ret记录答案. p代表位置指针,初始在rt位置. 对于第二 ...

  5. 原生js实现图片轮播思路分析

    一.复习原生js实现图片轮播 1.要点 自动轮播 点击小圆圈按钮,显示相应图片 点击左右箭头,实现向前向后轮播图片 2.实现思路 <div id="container"> ...

  6. 一段javascript设计模式应用场景

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  7. HDU 5638 Toposort 拓扑排序 优先队列

    Toposort 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5638 Description There is a directed acycli ...

  8. BZOJ 4031: [HEOI2015]小Z的房间 高斯消元 MartixTree定理 辗转相除法

    4031: [HEOI2015]小Z的房间 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4031 Description 你突然有了一个 ...

  9. oracle 查看执行最慢 sql

    查询执行最慢的sql select * from (select sa.SQL_TEXT, sa.SQL_FULLTEXT, sa.EXECUTIONS "执行次数", round ...

  10. 定制你自己的CRF模型

    如何训练自己的CRF模型 Ansj从5.0版本之后支持训练自己的crf模型,在此之前虽然已经很早支持了CRF模型,但是在用户的自训练上要求苛刻,而且本身实现的CRF从性能到准确率都不如CRF++或者第 ...