记得歌手陈琳曾经在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. redis三种连接方式

    安装 tar zxvf redis-2.8.9.tar.gz cd redis-2.8.9 #直接make 编译 make #可使用root用户执行`make install`,将可执行文件拷贝到/u ...

  2. vue中回到顶部

    1. 回到顶部,使用 scrollIntoView 方法: Element.scrollIntoView方法滚动当前元素,进入浏览器的可见区域 该方法可以接受一个布尔值作为参数.如果为true,表示元 ...

  3. 洛谷——P1916 小书童——蚂蚁大战

    P1916 小书童——蚂蚁大战 题目背景 小A在你的帮助下,开始“刷题”,他在小书童里发现了一款叫“蚂蚁大战”(又称蛋糕保卫战)的游戏.(你懂得) 题目描述 游戏中会出现n只蚂蚁,分别有a1,a2…… ...

  4. SecureFXPortable中文乱码

    SecureFXPortable有一个非常奇怪的地方,明明在全局选项中已经将编码设置为UTF-8,但连接Linux还是会出现中文乱码. 后来发现这个全局选项竟然不对SecureFXPortable生效 ...

  5. 【leetcode】200. Number of Islands

    原题: Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is s ...

  6. A/B Problem(大数)

    描述 做了A+B Problem,A/B Problem不是什么问题了吧! 输入 每组测试样例一行,首先一个号码A,中间一个或多个空格,然后一个符号( / 或者 % ),然后又是空格,后面又是一个号码 ...

  7. POJ1704 Georgia and Bob 博弈论 尼姆博弈 阶梯博弈

    http://poj.org/problem?id=1704 我并不知道阶梯博弈是什么玩意儿,但是这道题的所有题解博客都写了这个标签,所以我也写了,百度了一下,大概是一种和这道题类似的能转换为尼姆博弈 ...

  8. BZOJ 3282 Tree(动态树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3282 [题目大意] 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的x ...

  9. BZOJ 4327 JSOI2012 玄武密码(后缀自动机)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4327 [题目大意] 求每个子串在母串中的最长匹配 [题解] 对母串建立后缀自动机,用每 ...

  10. [bzoj1011](HNOI2008)遥远的行星(近似运算)

    Description 直 线上N颗行星,X=i处有行星i,行星J受到行星I的作用力,当且仅当i<=AJ.此时J受到作用力的大小为 Fi->j=Mi*Mj/(j-i) 其中A为很小的常量, ...