[next] [prev] [prev-tail] [tail] [up]

### 10.3 Restrictions on record helpers

Records do not offer the same possibilities as classes do. This reflects on the possibilities when creating record helpers. Below the restrictions on record helpers are enumerated:

- A record helper cannot be used to extend a class. The following will fail:
  TTestHelper = record helper for TObject
  end;

- Record helpers cannot implement constructors.
- Inside a helper’s declaration the methods/fields of the extended record can’t be accessed in e.g. a property definition. They can be accessed in the implementation, of course. This means that the following will not compile:
  TTest = record
  Test: Integer;
  end;
  TTestHelper = record helper for TTest
  property AccessTest: Integer read Test;
  end;

- Record helpers can only access public fields (in case an extended record with visibility specifiers is used).
- Inheritance of record helpers is only allowed in ObjFPC mode; In Delphi mode, it is not allowed.
- Record helpers can only descend from other record helpers, not from class helpers.
- Unlike class helpers, a descendent record helper must extend the same record type.
- In Delphi mode, it is not possible to call the extended record’s method using inherited. It is possible to do so in ObjFPC mode. The following code needs ObjFPC mode to compile:
  type
  TTest = record
  function Test(aRecurse: Boolean): Integer;
  end;
  TTestHelper = record helper for TTest
  function Test(aRecurse: Boolean): Integer;
  end;
  function TTest.Test(aRecurse: Boolean): Integer;
  begin
  Result := 1;
  end;
  function TTestHelper.Test(aRecurse: Boolean): Integer;
  begin
  if aRecurse then
  Result := inherited Test(False)
  else
  Result := 2;
  end;

[next] [prev] [prev-tail] [front] [up]