Casting an object to a type that is not guaranteed to have the same memory configuration can cause access violations if used improperly.
Remove the improper cast by refactoring the code. If the intention is to provide additional methods to operate on an object, consider using a class helper instead.
type
TAdditionalFunctionality = class(TObject)
public
procedure DebugPrint;
end;
procedure DoStuff(MyObj: TSecretString);
begin
TAdditionalFunctionality(MyObj).DebugPrint;
end;
type
TAdditionalFunctionality = class helper for TSecretString
public
procedure DebugPrint;
end;
procedure DoStuff(MyObj: TSecretString);
begin
MyObj.DebugPrint;
end;