| 修飾字 | 傳遞方式 | 初始值可見性 | 主要用途 |
|---|---|---|---|
| value (預設) | 傳值 (複製) | 可讀可寫 (區域副本) | 輸入參數,不影響呼叫端 |
| var | 傳址 (指標) | 可讀可寫 (同一記憶體) | 輸入輸出參數,**呼叫端需初始化** |
| out | 傳址 (指標) | **不可讀** (視為未初始化),**只可寫** | 純輸出參數,呼叫端**無需初始化** |
| const | 傳址 (指標,唯讀) | 可讀、不可寫 | 大型結構/介面輸入,避免複製開銷 |
procedure TestVar(var X: Integer); // 呼叫端 X 需有初始值
begin
ShowMessage(IntToStr(X)); // 可讀取初始值
X := 20;
end;
procedure TestOut(out X: Integer); // 呼叫端 X 無需初始化
begin
// ShowMessage(IntToStr(X)); // 錯誤:out 參數進入時值未定義
X := 20; // 必須指派值
end;
Swap、TryParse 模式需回傳多值)。GetUser(out Name, out Age)、COM 介面方法)。out 參數在程序內**必須被指派值** (所有路徑),否則編譯警告/錯誤。out 參數**不可在指派前讀取**。var 參數呼叫端**必須是變數**,不可為常數/運算式。Windows API (如 GetWindowRect) 多用 out 對應 LPRECT (輸出緩衝區)。Delphi 導入標頭檔時自動映射為 out 或 var。
const** (大型類型) 或 value (簡單類型)。var**。out**,語意最清晰,編譯器協助檢查未指派路徑。var 當輸出專用,降低可讀性。掌握 var (輸入輸出) 與 out (純輸出) 語意差異,能寫出更安全、自文檔化的 Delphi 程式碼。