从其它平台迁移而来


通常情况下,类型记录是没有方法的,只有有方法,但是可以通过给类型记录添加助手来达到类似于方法的功能,当然,也可以给添加助手

语法

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;

类型助手可以把与类型(通常是自定义类型)相关的方法/函数集中管理,同时也可避开方法重名的问题,一般用在对自定义类型进行初始化类型转换等场景。