记得歌手陈琳曾经在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. Codeforces 1131 B. Draw!-暴力 (Codeforces Round #541 (Div. 2))

    B. Draw! time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...

  2. 0821Servlet基础

    什么是servlet    jsp页面的前身是servlet, 但是servlet和jsp是两个不同概念    servlet是运行在服务器端的一段程序, 是可以直接运行一段java后台代码      ...

  3. Protocol Buffers 在前端项目中的使用

    前言: 公司后端使用的是go语言,想尝试用pb和前端进行交互,于是便有了这一次尝试,共计花了一星期时间,网上能查到的文档几乎都看了一遍,但大多都是教在node环境下如何使用,普通的js环境下很多讲述的 ...

  4. 四川oi 萌萌哒 (分层并查集)

    萌萌哒 时间限制: 1 Sec  内存限制: 256 MB提交: 12  解决: 2[提交][状态][讨论版] 题目描述 一个长度为 n 的大数,用 S1S2S3...Sn表示,其中 Si表示数的第 ...

  5. 分布式框架Dubbo配置和实例

    准备工作: 1.ZooKeeper:需要去Apache Zookeeper官网下载Zookeeper.tar.gz包,Dubbo是依赖于Zookeeper的 2.Maven:需要去Apache Mav ...

  6. Python开发基础-Day13模块2

    sys模块 sys模块提供了一系列有关Python运行环境的变量和函数. #重点记忆 sys.argv #命令行参数List,第一个元素是程序本身路径 sys.exit(n) #退出执行的程序未见,正 ...

  7. Kali Linux WPScan更新到2.9.3

    Kali Linux WPScan更新到2.9.3   WPScan是Kali Linux内置的一款Web漏洞扫描工具,专门扫描WordPress模版构建的网站.该工具最近更新到2.9.3.在新版本中 ...

  8. Python 头文件和常用函数

    #coding=utf-8 """ @version: ?? @author: Donny @Mail: wdm666666@gmail.com @license: La ...

  9. Java中的对象池技术

    java中的对象池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复重复创建相等变量时节省了很多时间.对象池其实也就是一个内存 ...

  10. 【二分查找】POJ2456-Aggressive cows

    [题目大意] 有N间牛舍和M头牛,告诉你每个牛舍的位置,求出两头牛之间最小距离的最大值. [思路] 二分判断两头牛之间的最小距离d,通过贪心法进行验证. #include<iostream> ...