聊一聊C#与.NET之间的关系

x33g5p2x  于2021-10-04 转载在 C#  
字(1.1k)|赞(0)|评价(0)|浏览(484)

C/# 语言介绍

C/#(读作“See Sharp”)是一种新式编程语言,不仅面向对象,还类型安全。 开发人员利用 C/# 能够生成在 .NET 中运行的多种安全可靠的应用程序。 C/# 源于 C 语言系列,C、C++、Java 和 JavaScript 程序员很快就可以上手使用。

C/# 是面向对象的、面向组件的编程语言。 C/# 提供了语言构造来直接支持这些概念,让 C/# 成为一种非常自然的语言,可用于创建和使用软件组件。 自诞生之日起,C/# 就添加了支持新工作负载和新兴软件设计实践的功能。 C/# 本质上是面向对象的语言。_/* 你需要定义类型及其行为。

.NET 体系结构(与 C/#)

C/# 程序在 .NET 上运行,而 .NET 是名为公共语言运行时 (CLR) 的虚执行系统和一组类库。 CLR 是 Microsoft 对公共语言基础结构 (CLI) 国际标准的实现。 CLI 是创建执行和开发环境的基础,语言和库可以在其中无缝地协同工作。

用 C/# 编写的源代码被编译成符合 CLI 规范的中间语言 (IL)。 IL 代码和资源(如位图和字符串)存储在扩展名通常为 .dll 的程序集中。 程序集包含一个介绍程序集的类型、版本和区域性的清单(metadata)。

执行 C/# 程序时,程序集将加载到 CLR。 CLR 会直接执行实时 (JIT) 编译,将 IL 代码转换成本机指令。 CLR 可提供其他与自动垃圾回收、异常处理和资源管理相关的服务。 CLR 执行的代码有时称为“托管代码”(而不是“非托管代码”),被编译成面向特定平台的本机语言。

语言互操作性是 .NET 的一项重要功能。 C/# 编译器生成的 IL 代码符合公共类型规范 (CTS)。 通过 C/# 生成的 IL 代码可以与通过 .NET 版本的 F/#、Visual Basic、C++ 或其他 20 多种与 CTS 兼容的任何语言所生成的代码进行交互。 一个程序集可能包含多个用不同 .NET 语言编写的模块,且类型可以相互引用,就像是用同一种语言编写的一样。

为什么需要二次编译

为了一次编译,不同平台使用,加一层中间层,更为灵活。

首先这要从系统层面出发,Windows 系统分为 32 与 64 位,而系统又分 Windows、Macos、Linux、Unix,未来也可能出现更多的系统。

这么多的系统如何和做到一次编译,在多平台运行呢?这就是二次编译,C/# 源代码被编译成中间语言 (IL),存储在扩展名通常为 .dll 的程序集中, 程序集包含一个介绍程序集的类型、版本和区域性的清单(metadata)。

这样在不同的品台,同一份编译的中间语言,通过 CLR 转换为不同平台可执行机器指令,在不同平台执行。所以说,为了一次编译,不同平台使用,加一层中间层,更为灵活。

相关文章