C#、. NET和Mono简介

互联网的兴起,对解决实际问题的更灵活解决方案的需求以及编程语言的不断发展催生了几种核心编程语言。 C#是自2000年以来一直使用的一种流行编程语言,它使开发人员能够构建可在.NET或Mono框架上运行的安全可靠的应用程序。

让我们一一探讨C# 、. NetMono Framework

Microsoft在2000年发布了C#作为强类型语言,作为.NET框架的一部分。 C#是类型安全的面向对象的语言,具有很高的表达能力和易于理解。 C#提供了有用的类的广泛库,使您的想象力是您可以实现的唯一限制。 C#实现了诸如封装多态继承之类的所有面向对象的概念,并且随着新功能的不断更新,它变得越来越可靠。 最新版本是C#7.2,于2017年与Visual Studio 2017一起发布。VisualStudio是针对.NET语言(如C#和VB)的开发和调试编辑器。

.NET Framework是Microsoft开发的软件开发框架,用于开发主要在Windows平台上运行的软件。 为.NET Framework编写的程序在软件环境(运行时虚拟机)中执行,而不是在硬件环境中执行。 该运行时虚拟机被称为公共语言运行时(CLR) ,它是.NET Framework的主要组件之一,主要负责内存管理,安全性和异常处理目的。

构成.NET框架的两个主要组件是–

a。)公共语言运行时(CLR)

b。).NET Framework类库(FCL)

.NET Framework类库(FCL)是开发人员在编写代码时使用的大量类型安全和独立于语言的类的集合。 这些类根据其称为命名空间的功能进行排列。 尽管如上所述, 公共语言运行时(CLR)是.NET框架的运行时组件,它充当虚拟机来运行Windows OS顶部的.NET编译器生成的已编译代码。 使用任何.NET语言编写的代码的编译均由相应的编译器完成,例如对于C#来说是C#编译器,对于VB来说就是VB编译器,依此类推。

让我们看看使用.NET Framework语言(如C#或VB)编写和编译程序的完整步骤:

  • 您使用C#,VB或任何其他.NET语言编写代码。
  • 在使用C#编译器VB.net编译器编译该代码期间,它不会直接转换为二进制/本机语言。 而不是将其与某些MetaData一起转换为MSIL(Microsoft中间语言)IL(中间语言) 。 MSIL(IL)+ MetaData,一起称为Bytecode 。 所以编译后我们得到了字节码。 这是您的构建。 这就是所谓的托管代码。
  • 您的构建现已准备就绪,可以在设备上进行部署。 请注意,随构建一起,构建附带有公共语言运行时(CLR) 。 在公共语言运行时(CLR)的即时(JIT)编译器执行代码的过程中,使用元数据将中间语言(IL或MSIL)转换为本机代码,这也称为非托管代码。 因此,字节码已转换为本机代码(非托管代码),因此您的程序正在Windows设备上运行。

注意事项:

托管代码是您编写并编译到.NET CIL的.NET代码(VB.NET,C#等)。

非托管代码是不在.NET下且可编译为直接机器代码的代码。

当Microsoft发布.NET框架时,它为创建功能强大,灵活而强大的软件提供了极大的可能性。 但这仅适用于Windows平台。 那其他人呢? —然后在2001年将Mono作为一个开源项目发布,该项目将.NET Compatible 框架类引入其他平台,包括其自己的c#编译器CLR(通用运行时语言) 。 如今,Mono支持几乎所有.NET功能,并且仍在增加其功能。

此框架的代码执行也与.NET框架相同:

  • –您使用C#编写代码。
  • – C#代码使用内置的C#编译器进行编译,并生成Bytecode或中间语言。 那是你的构建。
  • –使用捆绑的Mono运行时环境(或Common Language Runtime)在目标设备上运行构建。 Mono运行时负责垃圾收集,安全性,异常处理等。

Mono的代码执行引擎: Mono运行时包含将字节码(IL)转换为本机代码的代码执行引擎。 代码执行引擎具有以下三种模式

a。)即时(JIT)编译:运行时,运行时会将字节码转换为本机代码。

b。)提前(AOT)编译:此操作模式在代码运行之前编译大多数代码。 仍然有一些例外,例如蹦床,还有一些仍然需要JIT正常运行。

c。)完全静态编译:只有极少数设备支持这种编译模式,例如Apple的IOSPlayStation 3XBOX 。 这将AOT编译向前推进了一步,并生成了所有的蹦床,包装器和代理,并完全消除了对JIT的需求。

好吧,Mono的跨平台功能是软件供应商的主要解决方案之一,其目标是支持市场上广泛的流行平台。 例如, Unity 3D游戏引擎就是这样做的。 您还必须阅读Unity 3D如何使用Mono框架支持跨平台功能

因此,这是C#,Mono和.NET框架的简短介绍,我希望对您来说很清楚。 非常欢迎您提供反馈,更多解释或批评rit

关于作者: Niraj Vishwakarma ,我是一家印度公司的Unity游戏开发人员,在移动游戏,增强现实和VR应用程序开发方面拥有技能,并热衷于在此类技术上开展更多工作。 我也喜欢运动😉我的社交资料:电子邮件| 领英| 推特

资源:

https://zh.wikipedia.org/wiki/.NET_Framework

https://docs.microsoft.com/zh-cn/dotnet/csharp/getting-started/introduction-to-the-csharp-language-and-the-net-framework

https://www.codeproject.com/Articles/13434/MONO-an-alternative-for-the-NET-framework