内置类型

C# 提供 16 种内置预定义类型,分为13 种简单类型3 种非简单类型。 所有预定义类型名称均为全小写。

graph TD
    A[Predefined Types] --> B[Simple]
    A --> C[object]
    A --> D[string]
    A --> E[dynamic]

    B --> F[Non-numeric]
    B --> G[Numeric]

    F --> H[bool]
    F --> I[char]

    G --> J[Integer]
    G --> K[Floating Point]

    J --> L[8-Bit]
    J --> M[16-Bit]
    J --> N[32-Bit]
    J --> O[64-Bit]

    L --> P[sbyte]
    L --> Q[byte]

    M --> R[short]
    M --> S[ushort]

    N --> T[int]
    N --> U[uint]

    O --> V[long]
    O --> W[ulong]

    K --> X[decimal]
    K --> Y[float]
    K --> Z[double]

    %% 设置叶子节点为绿色
    style H fill:#90ee90
    style I fill:#90ee90
    style P fill:#90ee90
    style Q fill:#90ee90
    style R fill:#90ee90
    style S fill:#90ee90
    style T fill:#90ee90
    style U fill:#90ee90
    style V fill:#90ee90
    style W fill:#90ee90
    style X fill:#90ee90
    style Y fill:#90ee90
    style Z fill:#90ee90
    style C fill:#90ee90
    style D fill:#90ee90
    style E fill:#90ee90

13 种简单类型

  • 数值 (11) 整数 8 种:sbyte/byte、short/ushort、int/uint、long/ulong 小数 3 种:float、double、decimal(decimal 专用于金额高精度计算)
  • 非数值 (2):char(Unicode 字符)、bool(仅 true/false)

特性:C# 数值不能直接当作布尔判断,区别于 C/C++。

3 种非简单引用类型

string(字符序列)、object(所有类型基类)、dynamic(动态语言互操作)

C#类型和.NET类型

所有预定义类型都会直接映射到底层 .NET 类型。C# 的类型名称只是对应 .NET 类型的别名,因此语法上直接使用 .NET 原生类型名也能正常编译,但官方不推荐这种写法。在 C# 代码中,应当优先使用 C# 内置关键字别名,而非 .NET 完整类名。

预定义简单类型

C# 关键字含义取值范围.NET 底层类型默认值
sbyte8 位有符号整数-128 ~ 127System.SByte0
byte8 位无符号整数0 ~ 255System.Byte0
short16 位有符号整数-32768 ~ 32767System.Int160
ushort16 位无符号整数0 ~ 65535System.UInt160
int32 位有符号整数-2147483648 ~ 2147483647System.Int320
uint32 位无符号整数0 ~ 4294967295System.UInt320
long64 位有符号整数-9223372036854775808 ~ 9223372036854775807System.Int640
ulong64 位无符号整数0 ~ 18446744073709551615System.UInt640
float单精度浮点数1.5×10⁻⁴⁵ ~ 3.4×10³⁸System.Single0.0f
double双精度浮点数5×10⁻³²⁴ ~ 1.7×10³⁰⁸System.Double0.0d
bool布尔类型true / falseSystem.Booleanfalse
charUnicode 字符U+0000 ~ U+FFFFSystem.Char\x0000(空字符)
decimal高精度十进制数值(28 位有效数字)±1.0×10⁻²⁸ ~ ±7.9×10²⁸System.Decimal0m

预定义非简单类型

C# 关键字含义.NET 底层类型
object所有类型(包含简单值类型)的基类System.Object
string由 0 个或多个 Unicode 字符组成的字符串System.String
dynamic适配动态语言程序集的动态类型无对应的固定.NET 类型

int = System.Int32string = System.String 本质完全等价,编译器会自动互换识别;

编码规范强制推荐使用 C# 关键字(int 而非 Int32),代码可读性更高。

简单类型 也叫值类型 Value Type

存储单一数值,分配在栈内存;

声明后未手动赋值时,会自动赋予表格内标注的默认值

全部直接继承自 object,支持装箱 / 拆箱操作。(后面会提到)

整数系列

  • u 前缀(uint/ushort/ulong/byte):无符号,仅存储非负数;
  • sbyte/short/int/long:有符号,可存储正负整数。

浮点系列

  • float:单精度,后缀 f,精度低、运算快,适用于图形、3D 计算;
  • double:双精度,后缀 d,默认浮点字面量类型,通用科学计算;
  • decimal:高精度十进制,后缀 m,专为金融、货币场景设计,无浮点精度丢失问题。

布尔类型和字符类型

  • bool:仅两个取值,不能和数字互相隐式转换;
  • char:存储单个 Unicode 字符,本质是 16 位无符号数字。

非简单类型(引用类型 Reference Type)

  1. object:万物基类,所有值类型、引用类型都派生自它,是装箱机制的核心;
  2. string:特殊引用类型,字符串不可变,"" 空字符串为合法默认实例;
  3. dynamic:编译期不做类型校验,运行时解析成员,无固定.NET 映射,多用于和 Python/Ruby 等动态语言交互,牺牲编译安全换取灵活性。
    static void Main(string[] args)
    {
        // 1. 8位整数
        sbyte sByteNum = -60;
        byte byteNum = 200;

        // 2. 16位整数
        short shortNum = -12000;
        ushort uShortNum = 50000;

        // 3. 32位整数
        int intNum = -888888;
        uint uIntNum = 3000000000U;

        // 4. 64位整数
        long longNum = -7000000000000L;
        ulong uLongNum = 12000000000000000UL;

        // 5. 浮点类型
        float floatNum = 3.14f;
        double doubleNum = 2.71828;
        decimal decMoney = 999.99m;

        // 6. 布尔类型
        bool flag = true;

        // 7. Unicode字符
        char ch = 'A';

        // 8. 非简单预定义类型
        object obj = 123;
        string str = "FOXDEVELOP.COM";
        dynamic dy = "jack";
    }Code language: C# (cs)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注