.NET是一种独立于语言的平台。
但它是否也具有平台无关性呢?如何实现?
编辑: 我听说,.NET 4.0 是考虑到平台无关性而开发的!希望这能超过Java,如果可以的话!
编辑: 答案取决于我们如何定义“平台”,例如.NET适用于Windows平台,而Mono适用于Java。
但问题是,难道我们没有通用开发平台,它是与操作系统无关的吗!
操作系统的独立性是否与平台无关性相关?
.NET是一种独立于语言的平台。
但它是否也具有平台无关性呢?如何实现?
编辑: 我听说,.NET 4.0 是考虑到平台无关性而开发的!希望这能超过Java,如果可以的话!
编辑: 答案取决于我们如何定义“平台”,例如.NET适用于Windows平台,而Mono适用于Java。
但问题是,难道我们没有通用开发平台,它是与操作系统无关的吗!
操作系统的独立性是否与平台无关性相关?
这实际上是关于如何定义“平台”的问题。
例如,只要平台是.NET,.NET就是跨平台的;同样的,只要平台是Java,Java也是跨平台的。也就是说,.NET(和Java)在某种程度上可以被视为自身的平台(CLR、JVM)。只要针对特定物理平台有该平台的实现可用,就可以独立地在其上运行已编译的代码。
归根结底,“跨平台独立性”就像“一次编写,随处运行”一样,是一种市场宣传手段。但在实践中,目前有许多基于JVM的具体平台可用,而.NET则没有那么多(虽然像Mono项目这样的倡议旨在改变这一点)。
要回答这个问题,我认为必须首先清楚地区分CLI和.NET:
CLI(Common Language Infrastructure的缩写)是一个标准,因此它主要设计为跨平台。在这里,平台指底层计算机架构,包括操作系统。
虽然该标准可能需要某些不可能在所有架构上实现的东西(我想到了非常有限的平台,如嵌入式系统),但这些可能被视为边缘情况。
.NET是微软对CLI的主要实现,仅在Windows系统上运行。因此,.NET不是跨平台的。
更新(2015年8月):在2014年底,微软宣布计划逐步开放.NET Framework的部分内容(特别是与服务器端应用程序相关的部分)。其结果是.NET Core由.NET Foundation提供。
.NET Core旨在成为CLI的跨平台实现。
Mono也是CLI的一种实现,但是它设计用于在不同的平台上工作,例如Linux和Windows。Mono肯定比.NET更加跨平台。
来自维基百科:
我不确定您的问题是什么,但如果您想知道.NET应用程序是否可以在任何操作系统上运行,答案是否定的。
.NET Framework只针对某些操作系统,比如Windows。其他项目可用于其他平台,例如Linux上的Mono。
DotNet并非平台独立或者可能只是部分独立,而Java则完全平台独立,因为它有JVM(Java虚拟机)。
最好的例子来理解Java的独立性就是,如果安装了JVM(Java虚拟机),您可以在“汽车”微波炉、洗衣机或任何计算机上运行Java程序。
Java字节码是独立自由的,无论我们使用Mac、Windows、Unix等操作系统都没有问题。
好的。.NET Framework 是否是跨平台取决于“平台”实际上意味着什么。
如果平台 = 操作系统,那么 .NET Framework 不是跨平台的,.NET Core 是。
如果平台 = 独立系统/PC,那么是的,因为 CLR/CLI(就像 Java 的 JVM 一样),.NET Framework 是跨平台的。
Mono 是 .NET 的跨平台实现,但它不受 Microsoft 支持并且缺少一些功能。
在 Linux 上可能有一些 .NET 实现,其他系统上也可以编译。
它被称为 Mono。
只要你坚持使用 .Net 2.0 版本,.Net 在 MacOSX 和 Linux 上都能正常工作。一些新的功能,如 LINQ、C# 3.0 等也已经实现。但需要注意的是,在不同平台上,文件路径、文件权限等并不完全相似。
忘了提到我说的是 Mono。