在c# 高级编程中,讲到编译为中间语言就可以获得.net 平台无关性。我困惑的是(见补充问题)
编译成中间语言后,还需要CLR把这个中间语言编译成为.net平台专用的代码,这个CLR(。net运行库)难道不是.net特有的执行环境吗?难道这个中间语言可以跑在任何平台...
编译成中间语言后,还需要 CLR 把这个 中间语言 编译成为.net 平台专用的代码,这个CLR (。net 运行库)难道不是.net 特有的执行环境吗?难道这个中间语言可以跑在任何平台上吗?其他平台怎么认识这个中间语言啊? 为什么编译为中间语言就与.net 平台无关呢?这不自相矛盾吗?
展开
3个回答
展开全部
你好!
首先.net其实也是一种规范,基于COM+的规范,就像风靡一时的COM思想!不扯了
You are right!凡事无绝对,平台无关性也是相对某种意义上的。。。
首先你编写c#程序,编译成MSIL中间语言程序之后,运行经由CLR管理(所谓“托管”),不论目前的CPU是什么型号,哪个厂家生产的,不论目前的操作系统是哪个公司生产的都可以运行!
这样你就会问了,你不能在MAC或者linux上面运行,只能在windows上运行,而且还需要装net framewok,那这还叫什么平台无关性!
所以这里的平台无关性是指,你只需要编写一次代码,不用考虑目标平台的因素,之后只要目标平台装有“CLR”,就可以运行。如果希望能够在MAC或者linux上面运行,那么必须有人按照微软.net的规范去开发对应的CLR,比如linux的开源项目Mono!
CLR在托管运行该程序的时候,会针对目标平台和系统进行一些优化和“翻译”,形成一个二进制输出流给CPU去执行~
所以跟Java虚拟机的思想类似(java因为有linux版本和windows版本等,所以在对应系统上同样的程序可以运行),这些平台无关性指的是 “Once written, run anywhere!"这个意义上的。。。
我的表达能力不好,请见谅!
你可以去看看 .Net SDK中的一些头文件等,可以多少了解一些CLR,其实就是用COM+的思想,使用低级语言(c++)编写的一些核心的DLL,比如mscoree.dll等.
首先.net其实也是一种规范,基于COM+的规范,就像风靡一时的COM思想!不扯了
You are right!凡事无绝对,平台无关性也是相对某种意义上的。。。
首先你编写c#程序,编译成MSIL中间语言程序之后,运行经由CLR管理(所谓“托管”),不论目前的CPU是什么型号,哪个厂家生产的,不论目前的操作系统是哪个公司生产的都可以运行!
这样你就会问了,你不能在MAC或者linux上面运行,只能在windows上运行,而且还需要装net framewok,那这还叫什么平台无关性!
所以这里的平台无关性是指,你只需要编写一次代码,不用考虑目标平台的因素,之后只要目标平台装有“CLR”,就可以运行。如果希望能够在MAC或者linux上面运行,那么必须有人按照微软.net的规范去开发对应的CLR,比如linux的开源项目Mono!
CLR在托管运行该程序的时候,会针对目标平台和系统进行一些优化和“翻译”,形成一个二进制输出流给CPU去执行~
所以跟Java虚拟机的思想类似(java因为有linux版本和windows版本等,所以在对应系统上同样的程序可以运行),这些平台无关性指的是 “Once written, run anywhere!"这个意义上的。。。
我的表达能力不好,请见谅!
你可以去看看 .Net SDK中的一些头文件等,可以多少了解一些CLR,其实就是用COM+的思想,使用低级语言(c++)编写的一些核心的DLL,比如mscoree.dll等.
展开全部
CLR确实是.net特有的,只是.net平台上叫CLR而已。java上也有JRE,功能和CLR很类似。只不过java平台没有那么多语言罢了。
.net的多语言机制是建立在CLS上的,即公共语言规范。这是一个限定规范,它将现行的.net所支持的语言都是符合这个规范的。不然怎么会和中间语言相关呢。
.net平台上的中间语言叫做MSIL(微软中间语言),这种语言类似汇编语言的语法,如果你是程序员,你是绝对不会想去看这样的代码的。一个赋值的操作能写7,8行。而MSIL是.net平台特有的,在net平台上执行的代码都是MSIL。
所有支持.net平台的语言最终都会编译成为MSIL,然后再有.net平台执行这些代码。而编译的过程就是由CLR执行的。这也是编译型语言和解释性语言的区别之一!!
.net的多语言机制是建立在CLS上的,即公共语言规范。这是一个限定规范,它将现行的.net所支持的语言都是符合这个规范的。不然怎么会和中间语言相关呢。
.net平台上的中间语言叫做MSIL(微软中间语言),这种语言类似汇编语言的语法,如果你是程序员,你是绝对不会想去看这样的代码的。一个赋值的操作能写7,8行。而MSIL是.net平台特有的,在net平台上执行的代码都是MSIL。
所有支持.net平台的语言最终都会编译成为MSIL,然后再有.net平台执行这些代码。而编译的过程就是由CLR执行的。这也是编译型语言和解释性语言的区别之一!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
与.net 平台当然是相关的,但是与何种.net平台就无关了,如linux上的.net平台,把程序编译为中间语言即可以在linux上执行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询