博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

类的惰性属性

Posted on 2011-02-27 13:56  豪杰的爸爸  阅读(231)  评论(0编辑  收藏  举报

 

{在我们定义的对象(联系人)中包含的字段是对象(电话列表)时。往往这个字段不经常使用到。这样的字段称为惰性字段也就是惰性属性。
本例中的FPhoneNumbers就是这样情况。
}
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 
= class(TForm)
    Button1: TButton;
    ComboBox1: TComboBox;
    
procedure Button1Click(Sender: TObject);
  
private
    
{ Private declarations }
  
public
    
{ Public declarations }
  
end;

  TContact 
= class
  
private
    FName: 
string;
    FPhoneNumbers: TStrings;
    
function CreateFPhoneNumbers: TStrings;
    
function GetPhoneNumbers: TStrings;
    
procedure SetPhoneNumbers(const Value: TStrings);
  
public
    
constructor Create; virtual;
    
destructor Destroy; override;
    
property Name: string read FName write FName;
    
property PhoneNumbers: TStrings read GetPhoneNumbers write SetPhoneNumbers;
  
end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  
with TContact.Create do
  
begin
    Name :
= Button1.Caption;
    PhoneNumbers :
= ComboBox1.Items;
    ShowMessage(PhoneNumbers.Text);
  
end;

end;

{ TContact }

constructor TContact.Create;
begin
  
inherited;
  FPhoneNumbers :
= nil;
end;

function TContact.CreateFPhoneNumbers: TStrings;
begin
  
if (not Assigned(FPhoneNumbers)) then
    FPhoneNumbers :
= TStringList.Create;
  Result :
= FPhoneNumbers;

end;

destructor TContact.Destroy;
begin
  FPhoneNumbers.Free;
  
inherited;
end;

function TContact.GetPhoneNumbers: TStrings;
begin
  Result :
= CreateFPhoneNumbers;
end;

procedure TContact.SetPhoneNumbers(const Value: TStrings);
begin
  
if (Value = FPhoneNumbers) then Exit;
  PhoneNumbers.Assign(Value);
end;

end.