类:初识类的属性

ContractedBlock.gif ExpandedBlockStart.gif Code
unit Unit1;

interface

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

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

  TMyClass1 
= class
    FName: 
string//字段命名一般用F开头,应该是取field的首字母
    FAge: Integer; 
// 另:类的字段必须放在方法和属性前面
  
end;
  
//这个类中的二个字段,可以随便读写,在实陆应用中,这种情况是不存在的

  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}

procedure TForm1.Button1Click(Sender: TObject);
var
  MyClass1: TMyClass1;
  MyClass2: TMyClass2;
begin
  MyClass1 :
= TMyClass1.Create;
  MyClass2 :
= TMyClass2.Create;

  MyClass1.FAge :
= 1000//TMyClass1中的FAge字段可以接受一个离奇的年龄
  MyClass2.Age :
= 199//通过 TMyClass2中的age属性,只能赋一个合理的值
  ShowMessage(IntToStr(MyClass2.Age));
  MyClass1.Free;
  MyClass2.Free;
end;

{ TMyClass2 }

procedure TMyClass2.SetAge(const Value: Integer);
begin
  
if (Value > 0and (Value < 200)  then FAge := Value;

end;

procedure TMyClass2.SetName(const Value: string);
begin
  
if value <> '' then FName := Value;
end;

end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值