delphi面向对象编程思想之:对象、对象引用、对象克隆

一, 示例一,理解对象的引用:我们要搞清楚进行对象赋值的两个不同概念,

其一,是使用赋值操作符(:=)将一个对象的引用赋值给一个对象变量,产生的效果是

这两个变量指向的是同一个对象。其二,使用Assign或AssignTo方法可以将对象属性进行复制,

得到两个状态完全一样的两个对象。

 

ExpandedBlockStart.gif View Code
unit  Unit2;

interface

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

type
  TForm2 
=   class (TForm)
    BtnSet: TButton;
    dlgFont1: TFontDialog;

    mmo1: TMemo;
    BtnUndo: TButton;
    
procedure  BtnSetClick(Sender: TObject);
    
procedure  FormCreate(Sender: TObject);
    
procedure  BtnUndoClick(Sender: TObject);
  
private
    
{  Private declarations  }
  
public
    
{  Public declarations  }
  
end ;

var
  Form2: TForm2;

implementation

{ $R *.dfm }

procedure  TForm2.BtnSetClick(Sender: TObject);
begin
   
if  dlgFont1.Execute  then
   mmo1.Font:
= dlgFont1.Font;
end ;

procedure  TForm2.BtnUndoClick(Sender: TObject);
begin
  mmo1.Font:
= dlgFont1.Font;  // 字体不会还原,因为两者是同一个对象。
end ;

procedure  TForm2.FormCreate(Sender: TObject);
begin
  mmo1.Lines.Add(
' 一个可以任意设置字体和复原字体的例子 ' );
  dlgFont1.Font:
= mmo1.Font;
  
// 这里dlgFont1.Font只是复制了mmo1.font的对象引用  dlgFont1.Font ,mmo1.Font 指向的是同一个对象 ;
end ;

end .

 

示例二,应用了对象复制

 

ExpandedBlockStart.gif View Code
interface

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

type
  TForm2 
=   class (TForm)
    BtnSet: TButton;
    dlgFont1: TFontDialog;
    mmo1: TMemo;
    ForginalFont:TFont;
    BtnUndo: TButton;
    
procedure  BtnSetClick(Sender: TObject);
    
procedure  FormCreate(Sender: TObject);
    
procedure  BtnUndoClick(Sender: TObject);
  
private
    
{  Private declarations  }
  
public
    
{  Public declarations  }
  
end ;

var
  Form2: TForm2;

implementation

{ $R *.dfm }

procedure  TForm2.BtnSetClick(Sender: TObject);
begin
   
if  dlgFont1.Execute  then
   mmo1.Font:
= dlgFont1.Font;   // dlgFont1的font对象属性发生改变之后,赋值给mmo1.font控制字体样式
end ;

procedure  TForm2.BtnUndoClick(Sender: TObject);
begin
  mmo1.Font.Assign(ForginalFont);          
// 将 ForginalFont 赋值给mmo1.Font
end ;

procedure  TForm2.FormCreate(Sender: TObject);
begin
  mmo1.Lines.Add(
' 一个可以任意设置字体和复原字体的例子 ' );
  ForginalFont:
= TFont.Create;             // 这里我们创建了font对象ForginalFont来保存还原的字体属性,而不只是引用
  ForginalFont.Assign(mmo1.Font);        
// 将创建的font对象,复制给mmo1.font一份
end ;

end .

 

转载于:https://www.cnblogs.com/gaiyang/archive/2011/08/22/2148996.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值