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

时间:2016-03-17 14:09:22

标签: delphi overloading delphi-xe2

我使用了JEDI JVCL库中的可视化组件TJvListView。以下是此组件类的相关声明:

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;

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

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

  

E2361无法访问私有符号TJvListView.FOnSaveProgress

我试图重新定义一个公共方法,但它们必须访问私有成员/方法是不可避免的。鉴于此,我如何用我自己的定义重载该方法?

1 个答案:

答案 0 :(得分:3)

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

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