初探.NET底层原理

学习C#离不开.net平台,因为微软的开发平台真的是太强大了,它为每一个开发者都做了太多太多,但是我们不仅要知道怎么用,而且也应该知道其中的内部到底包含了什么。本篇文章不仅讲一些C#语言的知识,也包括.net平台中的一些运行的机理。

相比Java由于微软对C#语言的封装,让许多人在其学习的较长时间内不能深刻理解。举个简单的例子:我们知道C#语言关于字段的封装:在C#语言的实现中是get和set属性,而在Java中确是get和set方法让人一目了然,其实C#也是利用get,set方法实现的,只不过封装起来,大家看不到而已。

下面我们将从头讲起C#语言中的底层原理:

首先我们要知道任何语言的运行,归根到底是机器语言的运行,也就是大量的01数字。而C#语言也正是依靠.net平台,将这种高级语言编译成01代码。那么C#语言在.net平台中的编译过程到底是怎样的呢?

其实.NET平台相当于Java中的虚拟机,通过C#编译器得到中间语言(一种特殊的字节码),运行时再经由CLR中的JIT(just in Time)编辑器编译为机器代码,便于OS执行。

那么下面我们来看一下.NET中包含哪些内容?

该图为.NET平台机构图,可以发现VS.NET框架的核心技术为公共语言运行时(CLR)而且还包含BCL(基础类库)以及.NET中的各种语言,为何会有这么多种语言可以在.net平台中运行呢?其实,以上的各种语言都可以编写面向CLR的程序代码,这种代码在.net中被称为托管代码,所有的托管代码都可以在CLR上运行,具有平台无关性。为何.net不能实现跨平台呢?例如在Linux中为何不可以实现asp.net或者winform呢,其实就是因为没有面向Linux开发的CLR(不过mono貌似已经实现了,由于本人并未使用过,所以就不予置讲了),就是这样的原因,.net未能实现跨平台。

下面我们来看CLR中的包含哪些内容?

Base Class LIbrary Support:基础类库支持

Thread Support:CLR支持多线程(任何语言都可以利用此提供的服务来进行编写多线程应用程序)。

COM Marshaler:向下兼容(详细内容请看:https://msdn.microsoft.com/zh-cn/library/bb822049(v=vs.110).aspx)

Type Cheker:类型安全执行(任何不符合类型安全的强制转换后,都会进行检查,除此之外还自动检查未初始化的变量与超过索引的数组)

Exception Manager:异常处理机制

IL to Native Compliers:是指利用CLR对MSIL进行编译成机器代码。

GC:垃圾回收器并不能管理内存中所有的资源,开发人员仍然需要自己写代码实现回收,如使用close方法和dispose方法。

后续内容将逐步完善,请持续关注!

初探C#的更多相关文章

  1. 初探领域驱动设计(2)Repository在DDD中的应用

    概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...

  2. CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探

    CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...

  3. 从273二手车的M站点初探js模块化编程

    前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...

  4. JavaScript学习(一) —— 环境搭建与JavaScript初探

    1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...

  5. .NET文件并发与RabbitMQ(初探RabbitMQ)

    本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址:http://www.cnblogs.com/tdws/p/5860668.html 想必MQ这两个字母对于各位前辈们和老司 ...

  6. React Native初探

    前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...

  7. 【手把手教你全文检索】Apache Lucene初探

    PS: 苦学一周全文检索,由原来的搜索小白,到初次涉猎,感觉每门技术都博大精深,其中精髓亦是不可一日而语.那小博猪就简单介绍一下这一周的学习历程,仅供各位程序猿们参考,这其中不涉及任何私密话题,因此也 ...

  8. Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用

    一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...

  9. NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例

    一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器 ...

  10. Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

    一.Unity3D平台简介 Unity是由Unity Technologies开发的一个让轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的 ...

随机推荐

  1. 利用JDK自带工具keyTool生成安全证书

    前言:说一下最近做的工作,主要利用iText给网页中生成好的html报表转化为pdf格式的文件,并且在其中加入水印,数字签名等等,这部分主要介绍安全证书的目的就是为了做数字签名部分用的. 下面利用jd ...

  2. 2018 HNUCM ACM集训队选拔第一场

    1.小c的倍数问题 http://acm.hdu.edu.cn/showproblem.php?pid=6108 分析: 比赛的时候真的是各种想,结果发现自己是想多了...数论基础差得一批 求有多少个 ...

  3. vue项目在ie浏览器和360浏览器的兼容模式下不显示,出现promise未定义问题

    出现“promise未定义”问题,因为对es6不兼容 在项目中安装 babel-polyfill 依赖包 ① npm install babel-polyfill --save-dev ② 在main ...

  4. javascript的执行机制—Event Loop

    既然今天要谈的是javascript的事件循环机制,要理解事件循环,首先要知道事件循环是什么. 我们先从一个例子来看一下javascript的执行顺序. <script> setTimeo ...

  5. ABAP术语-V1 Module

    V1 Module 原文;http://www.cnblogs.com/qiangsheng/archive/2008/03/21/1115707.html Function module creat ...

  6. jQuery实现页面回到顶部功能

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  7. flask中的蓝图实现模块化的应用

    Blueprint 蓝图的基本设想是当它们注册到应用上时,它们记录将会被执行的操作. 当分派请求和生成从一个端点到另一个的 URL 时,Flask 会关联蓝图中的视图函数. 简单来说,Blueprin ...

  8. JS中判断字符串中出现次数最多的字符及出现的次数

    <script type="text/javascript"> var str = 'qwertyuilo.,mnbvcsarrrrrrrrtyuiop;l,mhgfd ...

  9. Field Security Profile Helper

    using System; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Messages; /// <summary> /// 安全字 ...

  10. 浅谈Vue响应式(数组变异方法)

    很多初使用Vue的同学会发现,在改变数组的值的时候,值确实是改变了,但是视图却无动于衷,果然是因为数组太高冷了吗? 查看官方文档才发现,不是女神太高冷,而是你没用对方法. 看来想让女神自己动,关键得用 ...