unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end; //TMyClass1 類裡面只有兩個欄位(變數來到類裡面稱做欄位) TMyClass1 = class FName: string; {欄位命名一般用 F 開頭, 應該是取 field 的首字母} FAge: Integer; {另外: 類的欄位必須在方法和屬性前面} end; {這個類中的兩個欄位, 可以隨便讀寫; 在實際運用中, 這種情況是不存在的.} //TMyClass2 類裡麵包含兩個屬性(property)、兩個方法、兩個和 TMyClass1 相同的欄位 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; { 但這裡的欄位: FName、FAge 和方法: SetAge、SetName 是不能隨便訪問的, 因為, 它們在 strict private 區內, 被封裝了, 封裝後只能在類內部使用. 屬性裡面有三個要素: 1、指定資料類型: 譬如 Age 屬性是 Integer 類型; 2、如何讀取: 譬如讀取 Age 屬性時, 實際上讀取的是 FAge 欄位; 3、如何寫入: 譬如希爾 Age 屬性時, 實際上是通過 SetAge 方法. 屬性不過是一個橋. 通過屬性存取欄位 和 直接存取欄位有什麼區別? 通過屬性可以給存取一定的限制, 譬如: 一個人的 age 不可能超過 200 歲, 也不會是負數; 一個人的名字也不應該是空值. 看 implementation 區 TMyClass2 類的兩個方法的實現, 就增加了這種限制. }var Form1: TForm1;implementation{$R *.dfm}{ TMyClass2 }procedure TMyClass2.SetAge(const Value: Integer);begin if (Value>=0) and (Value'' then FName := Value;end;//測試:procedure TForm1.Button1Click(Sender: TObject);var class1: TMyClass1; class2: TMyClass2;begin class1 := TMyClass1.Create; class2 := TMyClass2.Create; class1.FAge := 1000; {TMyClass1 中的 FAge 欄位可以接受一個離奇的年齡} class2.Age := 99; {通過 TMyClass2 中的 Age 屬性, 只能賦一個合理的值} //class2.FAge := 99; {TMyClass2 中的 FAge 欄位被封裝了, 在這裡無法使用} class1.Free; class2.Free;end;end.