Access a strict protected property of a Delphi class?
This class helper example compiles fine :
type
TMyOrgClass = class
strict private
FMyPrivateProp: Integer;
strict protected
property MyProtectedProp: Integer read FMyPrivateProp;
end;
TMyClassHelper = class helper for TMyOrgClass
private
function GetMyProtectedProp: Integer;
public
property MyPublicProp: Integer read GetMyProtectedProp;
end;
function TMyClassHelper.GetMyProtectedProp: Integer;
begin
Result:= Self.FMyPrivateProp; // Access the org class with Self
end;
Some more information about class helpers can be found here : should-class-helpers-be-used-in-developing-new-code
Update
Starting with Delphi 10.1 Berlin, accessing private
or strict private
members with class helpers does not work. It was considered a compiler bug and has been corrected. Accessing protected
or strict protected
members is still allowed with class helpers though.
In the above example access to a private member was illustrated. Below shows a working example with access to a strict protected member.
function TMyClassHelper.GetMyProtectedProp: Integer;
begin
with Self do Result:= MyProtectedProp; // Access strict protected property
end;
You can use a variant of the standard protected
hack.
Unit 1
type
TTest = class
strict private
FProp: Integer;
strict protected
property Prop: Integer read FProp;
end;
Unit 2
type
THackedTest = class(TTest)
strict private
function GetProp: Integer;
public
property Prop: Integer read GetProp;
end;
function THackedTest.GetProp: Integer;
begin
Result := inherited Prop;
end;
Unit 3
var
T: TTest;
....
THackedTest(T).Prop;
Strict protected only allows you to access the member from the defining class, and subclasses. So you have to actually implement a method on the cracking class, make it public, and use that method as the route into the target strict protected member.