我眼中的.net体系结构

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


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

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#高级编程

目录
相关文章
|
存储 开发框架 .NET
|
Web App开发 程序员 Windows
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
47 0
|
19天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
22 0
|
2月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
32 0
|
2月前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
2月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
116 5
|
4月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
32 0
|
4月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
128 0