It is not possible to extend a class with any method or property. There are some restrictions on the
possibilities:
- Destructors or class destructors are not allowed.
- Class constructors are not allowed.
- Class helpers cannot descend from record helpers, and cannot extend record types.
- Field definitions are not allowed. Neither are class fields.
- Properties that refer to a field are not allowed. This is in fact a consequence of the
previous item.
- Abstract methods are not allowed.
- Virtual methods of the class cannot be overridden. They can be hidden by giving them
the same name or they can be overloaded using the overload directive.
- Unlike for regular procedures or methods, the overload specifier must be explicitly
used when overloading methods from a class in a class helper. If overload is not used,
the extended type’s method is hidden by the helper method (as for regular classes).
The following modifies the previous example by overloading the ToString method:
TObjectHelper = class helper for TObject
function ToString(const aFormat: String): String; overload;
end;
function TObjectHelper.ToString(const aFormat: String): String;
begin
Result := Format(aFormat, [ToString]);
end;
var
o: TObject;
begin
Writeln(o.ToString(’The object’’s name is %s’));
end.