可视化组件重载方法限制私有成员访问

Overloading method of visual component restricts access to private members

我正在使用 JEDI JVCL 库中的可视化组件 TJvListView。下面是这个组件的相关声明class:

TJvListView = class(TJvExListView)
private
  FOnSaveProgress: TJvOnProgress;
public
  procedure SaveToStrings(Strings: TStrings; Separator: Char);

我想做的是用我自己修改过的定义替换 SaveToStrings() 方法。我尝试使用 "interposer" class way:

来做到这一点
uses
  JvListView
type
  TJvListView = class(JvListView.TJvListView)
  public
    procedure SaveToStrings(Strings: TStrings; Separator: Char);
  end;

  TfrmFaultMemView = class(TForm)
    lvFMEs: TJvListView;
  end;

procedure TJvListView.SaveToStrings(Strings: TStrings; Separator: Char);
begin
  if Assigned(Self.FOnSaveProgress) then  // COMPILER ERROR HERE
  begin
  end;
end;

原始方法依赖于访问 class 的一些私有成员,我必须在修改后的定义中保留该代码。

但是,当我尝试编译它时,它给了我一个错误:

E2361 Cannot access private symbol TJvListView.FOnSaveProgress

我正在尝试重新定义一个public方法,但不可避免的是他们必须访问private members/methods。鉴于此,我如何用自己的定义重载该方法?

而不是使用 private 字段 FOnSaveProgress 使用 published 属性 OnSaveProgress

当您扩展 class 时,您只能访问它的 protectedpublicpublished 成员。 Private 成员是私有的,即使扩展 class 也无法访问。您可以从其他 class 访问 private 成员的唯一地方是如果两个 class 都在同一单位并且成员未标记为 strict private