什么是.NET

.NET是一个免费的,跨平台的,开源的开发者平台,.NET平台可以用于构建许多不同类型的应用程序。在.NET平台上,你可以使用多种语言,编辑器,库来构建web应用,移动应用,桌面应用,游戏,以及IoT物联网应用。

.NET支持哪些编程语言

我们可以在.NET平台上使用C#,F#或者Visual Basic来开发应用:

  • C#是一个简单,现代,面向对象且类型安全的编程语言
  • F#是一个跨平台,开源,函数式编程的语言。它还包括面向对象和命令式编程
  • Visual Basic是一种易于使用的语言,具有用于构建类型安全,面向对象的应用程序的简单语法。

跨平台

无论你是使用C#, F#, 还是Visual Basic,我们的代码都是在其所处的操作系统上本机运行。 不同的.NET实现为我们处理了繁重的屏蔽操作系统底层的工作:

  • .NET Core是针对macOS,Windows和Linux上的网站,服务器和控制台应用程序的跨平台.NET实现。
  • .NET Framework支持Windows上的网站,服务,桌面应用程序等
  • Xamarin / Mono是一个用于在所有主要移动操作系统上运行应用程序的.NET实现。

上面的介绍也间接的回答了.NET Core和.NET Framework以及Mono的区别

标准API

.NET Standard是所有.NET实现的基础API集。

每个实现还可以暴露特定于其运行的操作系统的一些其他API。 例如,.NET Framework是一个仅限Windows的.NET实现,其中包含用于访问Windows注册表的API。

开发库

为了扩展功能,Microsoft和其他人维护了一个基于.NET Standard的开发包生态系统。

NuGet是专为.NET构建的包管理器,包含超过90,000个包。类似于java中的maven

.net当中的3C

CLR  公共语言运行时

负责资源管理,内存分配和垃圾收集。保证应用和底层操作系统之间必要的分离。common lanuage runtime,垃圾回收,.net的虚拟机,和java虚拟机类似,分为托管和非托管。

.net编译之后的文件类型是程序集assembly。通常也叫做dll。就是我们看到的dll文件,类似于java的jar包。

一个程序集包含四个部分:PE32,MSIL(中间语言),manifest,resource。

CLR处理的对象就是程序集。源代码用csc.exe编译为程序集。相当于java中的java compiler.

dll是程序集的一种,exe也是程序集?

CLR的其中一个功能会把它们翻译成机器码01010,这个功能是由JIT做的。   CLR运行时的特点:与平台无关。

CTS

通用类型系统

CKS

CKS是CTS的子集,描述了面向CLR编译器必须支持的一个最小特性集合,类似于java的jdk标准类库。

BCL基础类库

就是一些标准开发api,类似于java的jdk。

WCF->web协议支持。

WPF ->做桌面应用程序。

.net当中所有的对象都绝对继承于object,包括基本类型,int等,这是与java的一个区别。

C#2.0引入了泛型,5.0引入了异步编程模型。