程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 理解 Delphi 的類(三) - 初識類的屬性

理解 Delphi 的類(三) - 初識類的屬性

編輯:Delphi

unit Unit1;

interface
uses
 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<200) then
  FAge := Value;
end;
procedure TMyClass2.SetName(const Value: string);
begin
 if 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.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved