可视化组件重载方法限制私有成员访问
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 时,您只能访问它的 protected
、public
或 published
成员。 Private
成员是私有的,即使扩展 class 也无法访问。您可以从其他 class 访问 private
成员的唯一地方是如果两个 class 都在同一单位并且成员未标记为 strict private
。
我正在使用 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 时,您只能访问它的 protected
、public
或 published
成员。 Private
成员是私有的,即使扩展 class 也无法访问。您可以从其他 class 访问 private
成员的唯一地方是如果两个 class 都在同一单位并且成员未标记为 strict private
。