从其它平台迁移而来
通常情况下,类型和记录是没有方法的,只有类有方法,但是可以通过给类型和记录添加助手来达到类似于类的方法的功能,当然,也可以给类添加助手。
1
2
3
|
HelperName = class|record|type helper[(OptionalBaseHelper)] for TypeName
[properties, procedures, functions, constructors, consts, vars]
end [hint modifiers];
|
类助手#
FPC 2.6+版本可用,ObjFPC模式下无需特别设置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//定义
TObjectHelper = class helper for TObject
function SomeFunc: string;
end;
//实现
function TObjectHelper.SomeFunc: string;
begin
Result := '类名:' + Self.ClassName;
end;
//使用
var
o: TObject;
begin
Writeln(o.SomeFunc);
end.
|
一般情况下,给类添加方法可直接在类中添加,但这样添加的方法会直接在所有后代类中显示,如果只是想在特定的范围内添加方法,就可以使用类助手。
记录助手#
FPC 2.6+版本可用,ObjFPC模式下需打开ADVANCEDRECORDS编译开关,Delphi模式无需特别设置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
{$mode objfpc}{$H+}
{$MODESWITCH ADVANCEDRECORDS} //打开编译开关
//记录定义
TTest = record
x: integer;
end;
//记录助手定义
TTestHelper = record helper for TTest
procedure SomeMethod;
end;
//使用
var
t: TTest;
begin
t.SomeMethod;
end;
|
也可以像类一样直接定义方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
{$mode objfpc}{$H+}
{$MODESWITCH ADVANCEDRECORDS} //打开编译开关
//直接定义
TTest = record
x: integer;
procedure SomeMethod;
end;
//使用
var
t: TTest;
begin
t.SomeMethod;
end;
|
记录助手可以把与记录相关的方法/函数集中管理,同时也可避开方法重名的问题,一般用在对记录进行构造、清理、转换/变换等场景。
类型助手#
FPC 3.0+版本可用,所有模式下均需打开TYPEHELPERS编译开关。
1
2
3
4
5
6
7
8
9
|
{$mode objfpc}{$H+}
{$MODESWITCH TYPEHELPERS} //打开编译开关
//自定义类型
type
TIntArray = array of integer;
//定义助手
HIntArray = type helper for TIntArray
procedure Clear;
end;
|
类型助手可以把与类型(通常是自定义类型)相关的方法/函数集中管理,同时也可避开方法重名的问题,一般用在对自定义类型进行初始化、类型转换等场景。