【问题标题】:Can I define record helper for TBytes?我可以为 TBytes 定义记录助手吗?
【发布时间】: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&lt;Byte&gt;吗?我认为辅助函数不能与泛型类型一起使用。
  • 是的。它不会在XE3 中编译。这就是我在问题中所述使用XE4 的原因。
  • 我提供了一些额外的信息,以防它被证明有用。我猜你把我的评论弄错了。没关系。顺便说一句,您应该标记问题 delphi-xe4 以及使用通用 dephhi 标记。到目前为止你做了哪些调试?
  • @ChauCheeYang 显然,如果辅助方法中的Self 没有引用辅助主题,则这是一个错误。
  • @LURD 除了辅助继承之外,我和你在一起。我认为我们不需要帮助器继承,而是需要在多个帮助器范围内解析方法的能力。使用通用动态数组至关重要。类型兼容性是一个问题,但在泛型类型中使用和返回 TArray&lt;T&gt; 的能力是必不可少的。

标签: delphi delphi-xe4


【解决方案1】:

这里讨论过这个问题: https://forums.embarcadero.com/thread.jspa?threadID=88409 简而言之 - 您可以定义自己的类型并将其与记录助手一起使用:

type
 TMyBytes = array of Byte;

 TBytesHelper = record helper for TMyBytes
   function GetLength: integer;
 end; 

但它不适用于 Delphi 中定义的 TBytes。最近添加了对泛型类型的帮助器的支持,因此这可能是当前实现的一种限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多