Delphi 擁有豐富且層次分明的資料類型系統。本文按官方分類梳理所有類型類別,說明各類型的核心特性、典型用途與相互關係,幫助開發者建立完整的類型心智模型。
簡單類型不可再分解,佔用固定記憶體大小,支援序數運算(除 Real/浮點數)。
| 類別 | 代表類型 | 大小/範圍 | 說明 |
|---|---|---|---|
| 序數類型 | Integer | 4 位元組,-2147483648..2147483647 | 平台預設有號整數 |
| Cardinal | 4 位元組,0..4294967295 | 無號整數 | |
| Shortint | 1 位元組,-128..127 | ||
| Smallint | 2 位元組,-32768..32767 | ||
| Longint | 4 位元組 | 同 Integer | |
| Int64 | 8 位元組 | 64 位有號整數 | |
| Byte | 1 位元組,0..255 | 無號 | |
| Word | 2 位元組,0..65535 | 無號 | |
| LongWord | 4 位元組,0..4294967295 | 無號 | |
| Char / AnsiChar / WideChar | 1/1/2 位元組 | 字元類型 | |
| Boolean / ByteBool / WordBool / LongBool | 1/2/4 位元組 | 布爾類型 | |
| 枚舉類型 | (A, B, C) | 1/2/4 位元組 | 用戶定義離散值集 |
| 子範圍類型 | 0..100 | 依基型別 | 限制範圍的序數類型 |
| 實數類型 | Real | 8 位元組 | 雙精度浮點(同 Double) |
| Single | 4 位元組 | 單精度浮點 | |
| Double | 8 位元組 | 標準雙精度 | |
| Extended | 10/16 位元組 | 擴展精度(平台相關) | |
| Comp | 8 位元組 | 64 位整數運算的浮點表示 | |
| Currency | 8 位元組 | 固定 4 位小數,貨幣運算專用 |
| 類型 | 特性 | 適用場景 |
|---|---|---|
| string (UnicodeString) | 引用計數、写時複製、UTF-16、無長度上限 | 現代 Delphi (2009+) 預設字串 |
| AnsiString | 引用計數、代碼頁相關、無長度上限 | 舊代碼遷移、特定代碼頁處理 |
| WideString | 無引用計數、BSTR 相容、UTF-16 | COM/OLE 互操作 |
| ShortString | 固定長度 255、索引 0 存長度、棧分配 | 極少數底層/相容場景 |
| PChar / PWideChar | 指向以 #0 結尾的 Char/WideChar 陣列 | Windows API、C DLL 互操作 |
| 類別 | 關鍵字 | 特性 |
|---|---|---|
| 集合 | set of BaseType | 基型別須為序數且元素數 ≤ 256,位運算高效 |
| 陣列 | array[Low..High] of T | 靜態/動態、多維、開放陣列參數 |
| 記錄 | record ... end | 值語義、可含方法/屬性/建構子(10.4+)、變體記錄 |
| 檔案 | file of T / TextFile | 型別檔/文字檔,傳統 I/O |
| 類別 | class ... end | 參考語義、單一繼承、虛擬方法、介面實作、RTTI |
| 類別引用 | class of TClass | 元類型、工廠模式、動態建構 |
| 介面 | interface ... end | 純抽象、GUID、引用計數、多介面實作 |
PChar、PWideChar、PByte、PInteger、PRecord 等。type
TMyInt = Integer; // 類型別名(同一類型)
TNewInt = type Integer; // 不同類型(強類型區分,防止誤混用)
TCallback = procedure(X: Integer) of object;
PMyRecord = ^TMyRecord;
Simple Types ├─ Ordinal Types → Integer, Char, Boolean, Enum, Subrange ├─ Real Types → Single, Double, Extended, Currency └─ String Types → string, AnsiString, WideString, ShortString Structured Types ├─ Set ├─ Array (Static/Dynamic) ├─ Record ├─ File ├─ Class ├─ Class Reference └─ Interface Pointer Types Procedural Types Variant Types
Integer(平台自適應),位運算用 Cardinal/Byte。Currency,科學計算用 Double/Extended。string(UnicodeString)。record;需繼承、多態、堆分配 → class。Variant。建立清晰的類型分類認知,能在設計 API、優化記憶體、排查類型不匹配錯誤時事半功倍。