【发布时间】:2013-06-11 08:36:48
【问题描述】:
我正在使用 Delphi XE4。我尝试为 TBytes 定义一些辅助函数:
TBytesHelper = record helper for TBytes
public
function GetLength: integer;
end;
function TBytesHelper.GetLength: integer;
begin
Result := System.Length(Self);
end;
当我尝试使用新的辅助函数时:
var B: TBytes;
i: integer;
begin
B := TBytes.Create(1,2,3);
i := B.GetLength;
if i <> Length(B) then
raise Exception.Create('Incorrect result');
end;
我除了i 的结果是3,但它不是。我指的是 SysUtils.pas 中定义的 TStringHelper 具有类似的构造。
有什么我想念的吗?
【问题讨论】:
-
该代码甚至无法在 XE3 中编译。在
B.GetLength与[dcc32 Error]: E2018 Record, object or class type required失败。 XE4 中的TBytes是什么。还是TArray<Byte>吗?我认为辅助函数不能与泛型类型一起使用。 -
是的。它不会在
XE3中编译。这就是我在问题中所述使用XE4的原因。 -
我提供了一些额外的信息,以防它被证明有用。我猜你把我的评论弄错了。没关系。顺便说一句,您应该标记问题 delphi-xe4 以及使用通用 dephhi 标记。到目前为止你做了哪些调试?
-
@ChauCheeYang 显然,如果辅助方法中的
Self没有引用辅助主题,则这是一个错误。 -
@LURD 除了辅助继承之外,我和你在一起。我认为我们不需要帮助器继承,而是需要在多个帮助器范围内解析方法的能力。使用通用动态数组至关重要。类型兼容性是一个问题,但在泛型类型中使用和返回
TArray<T>的能力是必不可少的。
标签: delphi delphi-xe4