结构类型(3)结构方法和结构属性
----------------------------------------------------------------
结构方法
type
TRec = record {定义结构 TRec}
name: string[12];
age: Word;
function RecShow: string; {在结构中只能使用静态方法}
end;
{ TRec 结构方法的实现}
function TRec.RecShow: string;
const
str = '%s今年%d岁了';
begin
Result := Format(str, [name,age]);
end;
//使用结构
procedure TForm1.Button1Click(Sender: TObject);
var
rec: TRec;
begin
rec.name := '张三';
rec.age := 18;
ShowMessage(rec.RecShow);
end;
------------------------------------------------------------------------------
结构属性
type
TStr12 = string[12]; {属性不接受 string[12], 只好定义成一个类型或使用 ShortString}
TRec = record {定义结构 TRec}
strict private {如果不使用 strict 修饰符, 在同一单元内的私有变量也是可以访问的}
Fname: TStr12;
Fage: Word;
procedure Setage(const Value: Word);
procedure Setname(const Value: TStr12);
public
property name: TStr12 read Fname write Setname;
property age: Word read Fage write Setage;
end;
{ TRec 属性要调用的方法实现}
procedure TRec.Setname(const Value: TStr12);
begin
if Value='' then {这时可以提出一些条件, 譬如譬如姓名不能为空}
Fname := '无名氏'
else Fname := Value;
end;
procedure TRec.Setage(const Value: Word);
begin
if (Value<150) and (Value>=0) then {这时可以提出一些条件, 譬如年龄一般不会超过 150}
Fage := Value
else Fage := 0;
end;
//使用结构
procedure TForm1.Button1Click(Sender: TObject);
var
rec: TRec;
begin
rec.name := '张三'; {现在的 name 和 age 已经是属性了}
rec.age := 800;
ShowMessage(rec.name); {张三}
ShowMessage(IntToStr(rec.age)); {0}
rec.name := '';
rec.age := 18;
ShowMessage(rec.name); {无名氏}
ShowMessage(IntToStr(rec.age)); {18}
end;