从其它平台迁移而来
通常情况下,类型
和记录
是没有方法的,只有类
有方法,但是可以通过给类型
和记录
添加助手
来达到类似于类
的方法
的功能,当然,也可以给类
添加助手
。
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;
|
类型助手
可以把与类型
(通常是自定义类型
)相关的方法/函数
集中管理,同时也可避开方法重名
的问题,一般用在对自定义类型
进行初始化
、类型转换
等场景。