c# - C# 原始数据类型是该语言的一部分吗?

标签 c# .net

在 C++ 中,编译器知道原始数据类型,例如 int,但在 C# 中,这些基本上是结构(例如 System.Int32) .但是我可以假设 C# 知道这些类型吗?我认为确实如此,因为 C# 中的 int 文字基本上是 System.Int32 的一个实例。例如,这将起作用:

Console.WriteLine((12345).GetType());

输出:

System.Int32

最佳答案

当然,像 intbool 这样的类型名称是 C# 语言中的关键字。它与许多语言共享的属性,包括 C++。它们当前映射到您已知的 .NET Framework 中的类型。不要错误地认为 System.Int32 是一个 struct,这肯定不是它在处理器上的使用方式。它是一种很容易适合处理器寄存器的类型,对于使程序快速运行非常重要。您可以看到的结构声明仅代表装箱 int。用于创建所有类型(甚至值类型)都派生自 System.Object 的错觉。

一种语言硬烘焙到物理处理器类型的映射只会带来风险。处理器变化迅速。典型的例子是 C 语言,C# 的祖父,已经 43 岁了,并且在软件开发方面仍然非常相关。在具有 64 KB 内存的 16 位计算机上启动。紧随其后的是稳定性孤岛,32 位设计存在了很长时间,能够寻址 4 GB 内存。仍然适用于 64 位机器,今天的标准,能够处理 256 TB。在短短 43 年内增加了 40 亿倍,这是一个相当惊人的进步。 C 语言通过使类型名称成为关键字(就像 C# 并且不假定类型大小)而在这场剧变中幸存下来。

是的,当前的 C# 编译器对于程序在机器上运行时所使用的类型具有很强的内在知识。当您在程序中使用 int 时,它会在程序集中发出 System.Int32。抖动和 CLR 也是如此,它们完成了将值类型映射到处理器寄存器和内存的大部分繁重工作。它会永远发出System.Int32吗?如果它想在 43 年后仍然具有相关性,那就不行了。或者更早一点,现在融入 C# 的最严格的架构假设是数组的最大大小。它不能有超过 20 亿个元素,用 int 对其进行索引会耗尽 gas。当您今天已经拥有 256 TB 的可用内存时,这当然只是一个小点。

相比之下,128 位处理器也是 future 的发展方向。 IBM 按卡车装载量出售它们。您可以用那么大的地址空间做一些非常有趣的架构事情,文件 的概念变得无关紧要。整个文件系统是内存映射的,如果你想写入一个文件,那么你只需写入内存即可。超过 20 亿字节的文件在今天当然也不稀奇。

真正 有必要之前,有一些技术障碍需要清除,硬盘太慢,内存总线带宽太低,垃圾收集 TB 堆将卡住您的程序一会儿 :) 我们将不得不拭目以待。

关于c# - C# 原始数据类型是该语言的一部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28381233/

相关文章:

c# - XPath 查找所有匹配项 C# XmlDocument

c# - SaveFileDialog 事件 FileOk

.net - 为什么非 UI 线程能够修改 WinForm 和 TPL 中的 UI 控件?

c# - 在 C# 中更快地反转图像

c# - 安全地将变量值从一个页面传递到另一个页面

c# - 不安全结构中的只读数组字段

.net - .NET 中用于个人项目的免费代码覆盖工具

c# - 从动态类型创建泛型类的实例

C#:在 .NET 库中,是否有可以查看和打印 RTF 字符串的标准类?

c# - 使用 Linq 语句从 intellisense 中选择缺少的方法