如何在C#中创建原始数据类型?

时间:2017-11-20 08:09:15

标签: c# primitive-types

System.floatSystem.int和其他原语类型如何运作?我从来没有理解如何制作基元结构​​,我想知道我是否可以创建自己的数字类型。

2 个答案:

答案 0 :(得分:67)

假设我们正在谈论一个以公共语言基础结构(CLI)为目标的C#编译器,就像几乎所有内容一样,它基本上使用了CLI公开的基元类型。

实际上需要考虑三个级别的支持:

  • 真正的原语,在IL中有自己的表示和指示
  • C#编译器具有特殊知识但不属于CLI的数字类型 - 基本上是System.Decimal。这是也是公共类型系统(CTS)的一部分,这意味着如果在C#中创建const decimal,您仍然可以在VB中使用它,例如。但仍然没有直接的 IL 支持。
  • 其他数字类型,例如BigInteger - 您可以编写自己的数字类型。

第二个项目符号的中间地带允许C#具有十进制文字和十进制常量,第三个项目符号都不可能。例如,BigInteger没有语言支持,所以你不能写:

// This isn't valid
BigInteger bigInteger = 123456789012345678901234567890;

您必须改为解析字符串表示。同样,您不能拥有const BigInteger

(从理论上讲,有可能在C#中有一个支持的类型,但在CTS中却没有。我不知道任何这样的类型。)

答案 1 :(得分:7)

处理器直接支持intfloat等原始类型,.net平台和语言对它们具有类似的内置支持。所以你无法在语言层面创建自己的原语。