內建型別

C# 內建提供 16 種預先定義型別,區分為13 種簡單型別3 種非簡單型別。所有預設型別的名稱皆採全小寫書寫。

graph TD
    A[預定義型別] --> B[簡單型別]
    A --> C[object]
    A --> D[string]
    A --> E[dynamic]

    B --> F[非數值型別]
    B --> G[數值型別]

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

    G --> J[整數]
    G --> K[浮點數]

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

    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# 內建關鍵字,而非完整 .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由零個或多個 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: JavaScript (javascript)

內建型別

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *