如何在 Delphi 10.1 Berlin 中访问私有方法 TStreamReader.FillBuffer?

How to access the private method TStreamReader.FillBuffer in Delphi 10.1 Berlin?

如何在 Delphi 10.1 Berlin 中访问私有方法 TStreamReader.FillBuffer,我们在 10.1 之前使用 class 助手完成了它 - 但建议的解决方案不起作用:

uses System.Rtti;
procedure TForm1.FormCreate(Sender: TObject);
begin
  Assert(Assigned(TRttiContext.Create.GetType(TStreamReader).GetMethod('FillBuffer')), 
    'Failed');
end;

它失败只是因为 GetMethod returns NIL。知道为什么会失败吗?

已编辑: 我确实想知道为什么会失败

它失败了,因为这个 class 中没有包含私有方法。 参见

虽然有一个获取私有方法的解决方法:

参见:

type
  TStreamReaderHelper = class helper for TStreamReader
  public
    procedure FillBuffer(var Encoding: TEncoding);
  end;

procedure TStreamReaderHelper.FillBuffer(var Encoding: TEncoding);
var
  Method: procedure(var Encoding: TEncoding) of object;
begin
  TMethod(Method).Code := @TStreamReader.FillBuffer;
  TMethod(Method).Data := Self;
  Method(Encoding);
end;