直接从Delphi中的默认属性访问记录的变体部分

时间:2018-11-01 11:32:55

标签: delphi

我有以下记录,其中包含变体部分:

RVector3 = packed record
  [...]
  case byte of
    0 : (X : Single; Y : Single; Z : Single);
    1 : (XY : RVector2);
    2 : (Element : array [0 .. 2] of Single);
end;

要更快地访问单个元素,我想添加一个默认属性。

function GetElement(Index : Integer) : Single;
procedure SetElement(Index : Integer; const Value : Single);
property Elements[index : Integer] : Single read GetElement write SetElement; default;

所以我可以做myVector[Dim]而不是myVector.Element[Dim]。 现在,我想知道是否有任何方法可以省略getter和setter方法并直接访问变量部分。我知道有可能做

TTestClass = class
  private
    FTestVector : RVector3;
  public
    property Test : single read FTestVector.Y write FTestVector.X;
end;

但是可以将其应用于记录吗?如

property Elements[index : Integer] : Single read Element[Index] write Element[Index]; default;

很遗憾,这无法正常工作。

1 个答案:

答案 0 :(得分:4)

否,属性获取器或设置器无法直接访问数组的元素。您需要使用getter和setter函数。为了优化性能,如果这对您很重要,则可以标记getter和setter函数inline