.NET and C# Introduction

本文将简述.NET(包括.NET Framework, .NET Core等)和编程语言C#之间的关系。

Basic Information of .NET

Features of .NET

.NET的命名就是因为.net是互联网中比较通用的一个域名后缀,因此.NET本身也是和通用相关的。

  • 跨语言:即只要是面向.NET平台的编程语言((C#、Visual Basic.NET、C++/CLI、Eiffel、F#、IronPython、IronRuby、PowerBuilder、Visual COBOL 以及 Windows PowerShell)),用其中一种语言编写的类型可以无缝地用在另一种语言编写的应用程序中的互操作性。
  • 跨平台:一次编译,不需要任何代码修改,应用程序就可以运行在任意有.NET框架实现的平台上,即代码不依赖于操作系统,也不依赖硬件环境。

.NET Technical Framework System

.NET是一个微软搭造的开发者平台,它主要包括:

  1. 支持(面向)该平台的编程语言(如C#、Visual, Basic、C++/CLI、F#、IronPython、IronRuby…)
  2. 用于该平台下开发人员的技术框架体系(.NET Framework、.NET Core、Mono等),
    1. 定义了通用类型系统,庞大的CTS体系
    2. 用于支撑.NET下的语言运行时的环境:CLR
    3. NET体系技术的框架库FCL
  3. 用于支持开发人员开发的软件工具(即SDK,如VS2017、VS Code等)

Common Type System (CTS)

在.NET的三部分内容中,编程语言和软件工具我们都比较清楚,那么技术框架体系中的具体内容都是什么呢?

  • CLS: (Common Language Specification) 公共语言规范, 在面向.NET开发中,语言互操作的标准规范
  • CTS: (Common Type System) 公共类型系统, 包含:
    • 建立用于跨语言执行的框架。
    • 提供面向对象的模型,支持在 .NET 实现上实现各种语言。
    • 定义处理类型时所有语言都必须遵守的一组规则(CLS)。
    • 提供包含应用程序开发中使用的基本基元数据类型(如 Boolean、Byte、Char 等)的库。
    • 支持CTS,那么我们就称它为面向.NET平台的语言
      CLI(Common Language Infrastructure),是微软将CTS等内容提交给国际组织计算机制造联合会ECMA的一个工业标准。
·

Common Language Runtime (CLR)

  • CLR:.NET虚拟机
    • CLR是.NET类型系统的基础,所有的.NET技术都是建立在此之上
    • 在我们执行托管代码之前,总会先运行这些运行库代码,通过运行库的代码调用,从而构成了一个用来支持托管程序的运行环境,进而完成诸如不需要开发人员手动管理内存,一套代码即可在各大平台跑的这样的操作。
    • 这套环境及体系之完善,以至于就像一个小型的系统一样,所以通常形象的称CLR为”.NET虚拟机”。那么,如果以进程为最低端,进程的上面就是.NET虚拟机(CLR),而虚拟机的上面才是我们的托管代码。换句话说,托管程序实际上是寄宿于.NET虚拟机中
    • C# 编写的程序如果想运行就必须要依靠.NET提供的CLR环境来支持
  • CLR宿主进程:容纳.NET虚拟机的进程,该程序称之为运行时主机

下图是代码编译和运行的流程

Framework Class Library (FCL)

框架库是一些用于描述数据类型的基础类型。比如Object不仅是C#语言的类型根、还是VB等所有面向.NET的语言的类型根,它是整个FCL的类型根。同时.NET的框架库有单继承的特点。

  • BCL(Base Class Library)基础类库
    • 通过.NET语言下编写的一些类库
    • 多都包含在System命名空间下。
    • 包含:基本数据类型,文件操作,集合,自定义属性,格式设置,安全属性,I/O流,字符串操作,事件日志等的类型
  • FCL(Framework Class Library)框架类库
    • FCL中大部分类都是微软通过C#来编写的。
    • 用于网站开发技术的 ASP.NET类库,该子类包含webform/webpage/mvc,
    • 用于桌面开发的 WPF类库、WinForm类库
    • 用于通信交互的WCF、asp.net web api、Web Service类库等等

.NET Implementations

  • .NET Framework
    • A .NET implement coupled with Windows System
    • Only support different version of Windows
  • .NET Core
    • A open source .NET implementation for several desktop OS including Windows, macOS, and Linux, but NOT support mobile OS like Android or iOS.
    • Include a cross-platform CoreCLR
    • Implement subset of the .NET Framework library (decouple with Windows), and add new features (for common usage of different OS)
      • e.g. Not include WPF which coupled with Windows
      • UWP: Specific for Windows System
        • Cross Devices but only runs in Windows.
    • Better in the functions than Mono
  • Xamarin
    • A open source .NET implementation by for several OS including AndroidIOS and macOS
    • It is based on Mono BCL. Unity3d adopts this framework. It will compile the C# code to IL, and compile to naive code according to the target platform
    • Higher efficiency than .NET Core
  • .NET Standard
    • A set of fundamental APIs that all.NET implementations should implement
    • Cannot build the real program, but serve as the library for .NET implementations above

C# and .NET

C# is the programming language targeted to .NET. The version of C# is updated with the update of .NET implementations.

Reference

[1] https://www.cnblogs.com/1996V/p/9037603.html
[2] https://blog.csdn.net/MePlusPlus/article/details/76242330
[3] .NET Standard