初探.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. Linux下使用FIO测试磁盘的IOPS

    FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, ...

  2. Python 有用的 map() deduce() filter() 函数

    #!/usr/bin/python#5!+4!+3!+2!+1! #give 3 return 3*2*1def jiechen(n): N = map(lambda x:x+1,range(n)) ...

  3. 【问题解决】增加https后 phpcms 分页错误

    https://m.cnbuses.com/m.cnbuses.com/index.php?page=2查看分页方法 function pages()中有个pageurl 查看该方法,发现有类似htt ...

  4. Java 8-Stream流

    出处:Java 8 中的 Stream API详解 什么是流 Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator.原始版本的 Iter ...

  5. 不可变字符串String与可变字符串StringBuilder、StringBuffer使用详解

    String字符串 char类型只能表示一个字符,而String可以表示字符串,也就是一个字符序列.但String不是基本类型,而是一个定义好的类,是一个引用类型.在Java中,可以将字符串直接量赋给 ...

  6. 在angular7中创建组件/自定义指令/管道

    在angular7中创建组件/自定义指令/管道 组件 使用命令创建组件 创建组件的命令:ng generate component 组件名 生成的组件组成: 组件名.html .组件名.ts.组件名. ...

  7. mysql5.7 安装版 表不能输入汉字解决方案

    安装版本 的安装目录没有 my.ini 配置文件 在所在表执行 alter table 数据表名 CONVERT TO CHARACTER SET utf8;

  8. Ubuntu16.04 解决matplotlib乱码或者中文显示不了的问题(可用)

    一. 下载字体 SimHei.ttf 复制到linux字体库中 sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf 二.查看matplotlib配置 In ...

  9. WebGl 旋转(矩阵变换)

    代码1: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  10. jquery中的编程范式,即jquery的牛逼之处

    转自:http://www.iteye.com/topic/1119283 对jquery理解比较深,积累一下,整理了一下格式,就当练习一下 markdown 语法. 本文将结合jQuery源码的实现 ...