【问题标题】:How Common Type System get implemented? [closed]通用类型系统是如何实现的? [关闭]
【发布时间】:2021-04-23 07:38:52
【问题描述】:

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

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

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

Q2-Int32类型在mscorlib.dll,它是用C#实现的,所以我可以说Common Type的所有源代码都是用C#实现的,后面会编译成dll

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

.NET Framework 包括框架类库 (FCL)。 FCL 是一组 DLL 程序集,其中包含数千个类型定义,其中每种类型都公开了一些功能

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

【问题讨论】:

  • 你想用这个问题解决什么具体的编程问题?

标签: c# .net vb.net clr


【解决方案1】:
  1. 是的,int/Int32 对所有语言都是通用的,并且是通用类型系统的一部分。在大多数 C# 和 VB 语言中,它们之间没有明显的区别。

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

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

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

所以在 C# 和 VB 中你看不出它们之间的区别,只是编译器如何在底层使用它们。

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

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

  1. 是的,一部分。在.NET 的通常实现中,它是可以引用的最基本的 DLL(意味着每个其他 DLL 都引用它)。通常会说 BCL: 基类库,而不是 FCL。

【讨论】:

  • 对一个糟糕问题的回答就是一个糟糕的答案。
  • 这是为什么呢?更好的是,为什么这是一个糟糕的问题?这么说会让你感觉更好吗?
  • “为什么会这样?”。因为它鼓励了更多的坏问题。 “更好,为什么这是一个糟糕的问题?”。如果你知道这个网站是如何工作的,那么我就不必解释了。问题必须与特定问题相关,但事实并非如此。每个线程只应问一个问题,但事实并非如此。 “这样说会让你感觉更好吗?”。我这么说是因为我希望像你这样的人停止鼓励其他人发布浪费我时间的坏问题,以及那些试图帮助解决好问题的人。主题本身很好,但它不属于 SO。
  • intInt32 的描述和比较不是很清楚,很容易产生误导。
  • @AluanHaddad 解释一下,有需要我会修复的
猜你喜欢
  • 2016-03-04
  • 1970-01-01
  • 2017-09-01
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 2017-09-10
  • 2014-12-13
相关资源
最近更新 更多