通用类型系统是如何实现的?

How Common Type System get implemented?

我们知道无论是C#程序还是VB程序都会被编译成IL代码,如下图所示:

假设我们有一个 C# 程序和一个 VB 程序,它们都声明了一个整数,并且两个程序都被编译成汇编,下面是我的问题:

Q1- 根据 https://referencesource.microsoft.com/#mscorlib/system/int32.cs 我认为 Int32 是普通类型,对吗?

Q2-Int32类型在mscorlib.dll里面,而且是C#实现的,所以我能说Common Type的源代码都是C#实现的,后面编译成dll

Q3-我正在读一本书,上面写着:

The .NET Framework includes the Framework Class Library (FCL). The FCL is a set of DLL assemblies that contain several thousand type definitions in which each type exposes some functionality

所以我可以说 mscorlib.dll 是 FCL 的一部分吗?

  1. 是的,int/Int32 对所有语言都是通用的,并且是通用类型系统的一部分。在 C# 和 VB 语言的大部分内容中,它们之间没有明显的区别。

但是,在 CIL 中,您不应混淆 Int32 结构和 int,它们有些不同。

Int32是结构体,上面定义了所有函数,用于定义字段、参数、变量等存储位置

int 是 VES 堆栈上的 32 位整数表示,用于所有 8 位、16 位和 32 位基本整数类型,并允许传输到定义为的任何位置Int32.

所以在 C# 和 VB 中,您看不出它们之间有什么区别,这只是编译器在后台使用它们的方式。

  1. 不完全是。所有使用在 Int32 上声明的函数的代码,是的,将在 mscorlib 中编码。但是任何涉及简单 IL 字节码的东西都是由编译器直接编码的,因此 JIT 直接对其进行处理。

(警告:JIT 可能也大量优化和内联 mscorlib 函数)。

  1. 是的,一部分。在 .NET 的通常实现中,它是可以引用的最基本的 DLL(意味着所有其他 DLL 都引用它)。通常说 BCL: Base Class Library,而不是 FCL。