我使用了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
我试图重新定义一个公共方法,但它们必须访问私有成员/方法是不可避免的。鉴于此,我如何用我自己的定义重载该方法?
答案 0 :(得分:3)
而不是使用private
字段FOnSaveProgress
使用published
属性OnSaveProgress
扩展课程时,您只能访问protected
,public
或published
成员。 Private
成员是私有的,即使是扩展课程也无法访问。您可以从其他类访问private
成员的唯一地方是,如果两个类都在同一单元中,并且成员未标记为strict private
。