我眼中的.net体系结构


一:首先要明白的几个术语

1.Microsoft中间语言
Microsoft Intermediate Language简写为MSIL或者直接叫IL
大多数技术文章中也是叫IL
所有编译好的代码都要使用这种语言,
把代码编译成中间语言,这些编译好了的就叫托管代码(managed code)

2.CLR是公共语言运行库或者.net运行库
托管代码都是在公共语言运行库下运行的

知道这两个术语的概念了,那么我们大致看一下托管代码的优点
<1>平台无关性
只要这个平台能部署.net那么这个平台就能运行.net的程序
听起来和java差不多,但.net要比java差多了,
很多平台还不能部署.net
<2>提高性能
因为中间语言已经相当靠近低层了,所以性能比较好
这里说一下,他的性能跟c   c++  汇编等语言编译出来的程序是没法比的,要差很多

但是他比java要好一些,为什么呢?
因为每次运行java程序时都要把代码转换成中间语言
.net一次编译后第二次运行就没有这个过程了,这个叫即时编译
<3>语言的互操作性
能将任何一种语言编译成中间代码,编译好的中间代码可以与从其他语言编译过来的代码进行交互
试想一下一种语言编写的类能和另一种语言编写的类通信将是什么状况
这不是COM所能完成的使命(具体的不解释)

二:说说中间语言

1.两种数据类型
值类型:变量直接保存其数据(在堆栈上)
引用类型:变量保存数据的引用(在堆上)
2.强数据类型
所有的变量都清晰的标记为属于某个特定的数据类型(int  float等等)
虽然使用强数据类型会降低性能(具体的不解释)
但他能提供以下四方面的优点
<1>语言的互操作性(VB的32位有符号整数映射的是中间语言的Int32,其他语言类似)
<2>垃圾收集(哪些对象尚有引用,哪些对象已经没有引用了,没有引用的对象将被删除)
<3>安全性(CLR在运行代码前检查安全权限)
<4>应用程序域(禁止超出边界的数组操作等等)
3.面向对象和接口的支持
4.通过异常方法处理错误
5.特性的使用
(c++的程序员可能会更熟悉这个)

三:说说程序集
程序集(assembly)是编译好的面向.net framework的代码的逻辑单元
1.私有程序集
私有程序集是自包含的,
只要把相关文件放在指定目录下就好了不用操作注册表(xcopy)
2.共享程序集
其他程序集可以使用的公共库,要防止名称冲突和覆盖问题
3.反射
动态的创建类的实例

 

另外说几点:

c++.net是可以直接编译成二进制代码的,想学c++的人可以使用vs开发环境
.net的垃圾收集和java的很相似
J#和Python的语法很相似
不可否认.net学习了java和c++,但.net要比这两者都优秀
文章参考了c#高级编程

原文地址:https://www.cnblogs.com/liulun/p/1269346.html