2

我正在阅读Wikipedia 中的.NET Framework文章,第一段描述了这个框架的一般概念,它说:

它包括一个大型库,并提供跨多种编程语言的语言互操作性(每种语言都可以使用用其他语言编写的代码)。

当它声明 .NET 提供语言互操作性时,共享的是什么:代码还是代码功能?

例如,我有以下简单代码:

class Math
{
   public double Pow( double a, double b)
   {
      return Math.Pow(a,b);
   }
}

我是否有权访问 C# 代码或 Math 对象的实例化?

4

5 回答 5

12

当你编译你的 C# 程序时,它被编译成 IL(中间语言)。然后,任何其他 .NET 语言都可以使用该编译程序,例如 Visual Basic 程序可以引用您的程序,创建 Math 类的实例并使用它。

Visual Basic 不关心(或知道)您的 Math 类是用 C# 编写的,它所看到的只是一个 .NET 类。这就是语言互操作性。如果 VB.NET 只能使用用 VB.NET 编写的类,而 C# 只能使用用 C# 编写的类,那么这些语言将无法互操作。

于 2013-06-21T19:12:13.263 回答
6

Language interoperability is the ability of code to interact with code that is written using a different programming language. Language interoperability can help maximize code reuse and, therefore, improve the efficiency of the development process. Every code written in any .NET language and compiled could be reused from other .NET language.

于 2013-06-21T19:15:06.960 回答
3

如果你想在 VB.NET 中使用这个类,你应该没有问题。

Dim math As New Math()
Dim result As Double
result = math.Pow(2, 32)

编译 .NET 代码时,无论使用什么语言编写它,它都会生成MSIL,无论是 C#、VB.NET、F# 等。生成的 MSIL 代码可以被不同的语言使用,而不是它原来的语言写在。

几乎所有时候,用 A 语言编写的课程可以像用 B 语言编写一样使用。

例如,您可以在 C++/CLI 中编写一个用于特殊计算的 DLL,并在 C# 中编写一个使用该库的程序。两者是兼容的,无需使用 P/Invoke 等互操作方法。

大多数 .NET Framework 本身都是用 C# 编写的。然而,它与 VB.NET 和朋友完美兼容。

于 2013-06-21T19:12:51.290 回答
1

语言互操作性是指在通用语言上编译的 .NET 特性,无论开发人员使用何种编码语言。添加执行 JIT(即时)编译器支持的代码的能力。

公共语言运行时或 CLR(“公共语言运行时环境”)是在 Microsoft .NET 平台上运行的程序代码的运行时环境。

CLR 是 .NET 框架的真正核心,它是一个执行环境,在其中加载以不同语言开发的应用程序,扩展操作系统的服务集(W2k 和 W2003)。它允许集成 .Net 平台支持的不同语言的项目,例如 C++、Visual Basic、C# 等。

使用 CLR 的开发人员以 .NET 兼容语言(例如 C# 或 Visual Basic)编写源代码

CLR 负责在运行时使用编译器将称为公共中间语言(CIL,以前称为 MSIL,由 Microsoft 中间语言)的中间代码形式编译为本机机器代码。

要执行它需要第二步,JIT(即时)编译器是生成在客户端平台上执行的实际机器代码的编译器。这是通过 .NET 独立于硬件平台来实现的。JIT 编译由 CLR 在程序调用方法时执行。获得的可执行代码存储在计算机的缓存中,只有在源代码发生更改时才会重新编译。

CLR 不应与虚拟机混淆,因为一旦代码被编译,它就可以在本地运行,而无需底层硬件上的抽象层的干预。它是公共语言基础设施 (CLI) 标准的实现。

于 2017-04-14T18:30:46.333 回答
0

所有面向对象的编程语言都提供代码的可重用性,但仅限于语言,而 .net 语言提供 CIL 的跨语言可重用性,即从一种 .net 语言生成的 CIL 代码将来可以从任何其他 .net 语言重用,我们称之为这作为一种语言的互操作性

在此处输入图像描述

如果任何两种语言想要相互操作,他们需要跨越两个障碍

  1. 编译代码中的不匹配。
  2. 数据类型不匹配。

.Net 既克服了障碍,又克服了其他语言的优势之一。

更多详情 https://www.cshapatoz.com/2017/10/net-basic-1.html

于 2020-03-08T07:38:29.197 回答