初探C#
初探.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#的更多相关文章
- 初探领域驱动设计(2)Repository在DDD中的应用
概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...
- CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探
CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...
- 从273二手车的M站点初探js模块化编程
前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...
- JavaScript学习(一) —— 环境搭建与JavaScript初探
1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...
- .NET文件并发与RabbitMQ(初探RabbitMQ)
本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址:http://www.cnblogs.com/tdws/p/5860668.html 想必MQ这两个字母对于各位前辈们和老司 ...
- React Native初探
前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...
- 【手把手教你全文检索】Apache Lucene初探
PS: 苦学一周全文检索,由原来的搜索小白,到初次涉猎,感觉每门技术都博大精深,其中精髓亦是不可一日而语.那小博猪就简单介绍一下这一周的学习历程,仅供各位程序猿们参考,这其中不涉及任何私密话题,因此也 ...
- Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用
一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...
- NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例
一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器 ...
- Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生
一.Unity3D平台简介 Unity是由Unity Technologies开发的一个让轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的 ...
随机推荐
- Linux下使用FIO测试磁盘的IOPS
FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, ...
- 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)) ...
- 【问题解决】增加https后 phpcms 分页错误
https://m.cnbuses.com/m.cnbuses.com/index.php?page=2查看分页方法 function pages()中有个pageurl 查看该方法,发现有类似htt ...
- Java 8-Stream流
出处:Java 8 中的 Stream API详解 什么是流 Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator.原始版本的 Iter ...
- 不可变字符串String与可变字符串StringBuilder、StringBuffer使用详解
String字符串 char类型只能表示一个字符,而String可以表示字符串,也就是一个字符序列.但String不是基本类型,而是一个定义好的类,是一个引用类型.在Java中,可以将字符串直接量赋给 ...
- 在angular7中创建组件/自定义指令/管道
在angular7中创建组件/自定义指令/管道 组件 使用命令创建组件 创建组件的命令:ng generate component 组件名 生成的组件组成: 组件名.html .组件名.ts.组件名. ...
- mysql5.7 安装版 表不能输入汉字解决方案
安装版本 的安装目录没有 my.ini 配置文件 在所在表执行 alter table 数据表名 CONVERT TO CHARACTER SET utf8;
- Ubuntu16.04 解决matplotlib乱码或者中文显示不了的问题(可用)
一. 下载字体 SimHei.ttf 复制到linux字体库中 sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf 二.查看matplotlib配置 In ...
- WebGl 旋转(矩阵变换)
代码1: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- jquery中的编程范式,即jquery的牛逼之处
转自:http://www.iteye.com/topic/1119283 对jquery理解比较深,积累一下,整理了一下格式,就当练习一下 markdown 语法. 本文将结合jQuery源码的实现 ...