封裝旨在隱藏實作細節、保護資料完整性,透過存取權限控制外部對類別內部成員的可見性。
TMyClass1 = class
FName: string;
FAge: Integer;
end;
外部可直接 `Obj.FAge := 1000`,資料無保護。
TMyClass2 = class
private
FName: string;
FAge: Integer;
public
// 需提供公開方法/屬性供存取
end;
注意:private 在同一單元內仍可見,非完全隔離。
TMyClass3 = 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;
strict private:真正限制存取於類別本身,同單元也不可見(Delphi 2005+)。read/write 指定欄位或存取方法。
procedure TMyClass3.SetAge(const Value: Integer);
begin
if (Value >= 0) and (Value < 200) then
FAge := Value; // 驗證通過才寫入
end;
procedure TMyClass3.SetName(const Value: String);
begin
if Value <> '' then
FName := Value; // 拒絕空白名稱
end;
| 關鍵字 | 可見範圍 | 適用版本 |
|---|---|---|
private | 同單元內可見 | 所有版本 |
strict private | 僅類別本身 | Delphi 2005+ |
protected | 子類別 + 同單元 | 所有版本 |
strict protected | 僅子類別 | Delphi 2005+ |
public | 所有地方 | 所有版本 |
published | 所有地方 + RTTI 支援 | 所有版本 |
善用 strict private 搭配屬性與存取方法,是 Delphi 實現強封裝的標準模式。這不僅保護資料,更讓類別介面清晰、維護容易。