欄位是類別內部的資料儲存單元;屬性是對外公開的存取介面,可攔截讀寫操作,注入驗證邏輯。
TMyClass1 = class
FName: string; // 命名慣例:F 開頭
FAge: Integer;
end;
外部可任意寫入:`Obj.FAge := 1000`(不合理數值)。
TMyClass2 = class
strict private
FName: string;
FAge: Integer;
procedure SetAge(const Value: Integer);
procedure SetName(const Value: string);
published
property Name: string read FName write SetName;
property Age: Integer read FAge write SetAge;
end;
| 要素 | 說明 | 範例 |
|---|---|---|
| 資料型別 | 屬性對外呈現的型別 | property Age: Integer |
| 讀取規則 | read 指定欄位或函數 | read FAge(直接讀欄位) |
| 寫入規則 | write 指定欄位或程序 | write SetAge(呼叫驗證方法) |
procedure TMyClass2.SetAge(const Value: Integer);
begin
if (Value >= 0) and (Value < 200) then
FAge := Value; // 只接受合理年齡
end;
procedure TMyClass2.SetName(const Value: string);
begin
if Value <> '' then
FName := Value; // 拒絕空字串
end;
var
C1: TMyClass1;
C2: TMyClass2;
begin
C1 := TMyClass1.Create;
C2 := TMyClass2.Create;
C1.FAge := 1000; // 通過!資料受汙染
C2.Age := 99; // 通過,合理值
// C2.Age := 1000; // 被 SetAge 攔截,FAge 不變
// C2.FAge := 99; // 編譯錯誤:strict private 不可見
C1.Free; C2.Free;
end;
property Items[Index: Integer]: String read GetItem write SetItemproperty Items[Index: Integer]: String read GetItem write SetItem; defaultstored、default、nodefault:控制 DFM 序列化行為。implements:介面代理(Delphi 2006+)。屬性是「資料的守門員」。善用 read/write 搭配存取方法,能在不改變外部呼叫語法的前提下,靈活加入驗證、快取、通知等邏輯,是 Delphi 封裝的核心工具。