初探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方法。

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

原文地址:https://www.cnblogs.com/qal2767799810/p/4943741.html