我们目前对.NET的理解可以概括为:一开始是Java平台的克隆(注意是平台,不要和Java混为一谈)语言),然后慢慢演变,具有自己的特点。由于Java平台最显着的特点就是“平台独立性”(或者不知道是谁发明了Writeonce,Runanywhere这个词)。理论上,您可以编写在任何安装了JVM的操作系统上编译和运行的程序。大多数人认为.NET的出现是为了效仿Sun的伟大理念——平台无关性,从而与Java竞争。后来也有人不知道从哪里得出结论,就算有Mono这样的非Windows平台。NETCLR,但有许多.NET程序无法移植到其他操作系统。比如Winform就很难移植到GoingtoLinux,于是我得出了一个震惊的结论:微软连完全模仿都没有,竟然是伪跨平台。以上是我目前看到的最多的结论:.NET的致命弱点就是不能真正跨平台。为此,我有以下说明:(1).NET平台出现的目的不是为了支持跨平台,而是为了优化传统的Windows开发模式,让Windows开发更加方便快捷。解决了COM时代的DllHell问题(.Net程序集版本控制),集成多种语言(方便各种程序员),各种语言编写的组件(程序集)之间没有障碍集成面向对象和组件-面向一个,你可以从一个组件(dll)中派生出一个新的类型而不需要这个类型的所有源代码(在这个UnManaged时代不可能),真正实现了Binarycompatibility(你在程序集中改变一个public成员,如果使用这个程序集的客户端程序没有使用这个public成员,那么客户端根本不需要重新编译),提供C++没有的内存管理,支持异常处理等等。严格来说,微软第一天发布.NET是针对它的Windows的,它并没有打算让你的程序运行在其他操作系统上(微软至今还没有针对非Windows平台发布官方的.NETCLR。??)。(2)谈谈Java平台和.NET两者追求的目标。前者自出现以来就认为:在互联网世界,我要让一种语言可以运行在任何操作系统上;而后者则认为:在互联网世界中,我希望所有语言都运行在同一个操作系统(Windows)中。这两个平台从一开始就是为不同的目的而设计的。(3)两者侧重点不同:如上图,红色部分是别人扩展的功能。(4)如上文3所述,两个平台结构相似。不知道微软有没有抄袭Java,但可以肯定的是,如果两位主人有心,两个平台都可以实现“跨平台”和“多语言支持”。至于为什么有些.NET程序不能用Mono移植到Linux上,这个很好解释。Microsoft无意将.NET程序移植到其他平台。.NET中包含的一些丰富的框架与Windows密切相关,你使用这些框架,很难将它们翻译成可以在非Windows平台上执行的代码。而且Java也不是完全跨平台的,跟你实际开发用的框架有关。以上案例如果不能移植,关键有两点。一个是你开发时使用的框架,另一个是CLR(或JVM)。这取决于后者是否有能力将前者翻译成相应平台的可执行代码。综上所述,两个平台的侧重点不同。
