我需要修复第三方组件。这个组件的类有积极使用其子孙私有变量:Delphi:写入后裔类的私人祖先字段
TThirdPartyComponentBase = class
private
FSomeVar: Integer;
public
...
end;
TThirdPartyComponent = class (TThirdPartyComponentBase)
protected
procedure Foo; virtual;
end;
procedure TThirdPartyComponent.Foo;
begin
FSomeVar := 1; // ACCESSING PRIVATE FIELD!
end;
这工作,因为这两个类都在同一个单位,所以他们有点“朋友”。
但是,如果我会尝试在一个新的单位
TMyFixedComponent = class (TThirdPartyComponent)
procedure Foo; override;
end;
我无法访问FSomeVar再创建一个新的类,但我需要用我的修补程序。而且我真的不想在我的代码中再现基类的所有树。
你可以建议一些快速入侵访问该私人领域而不改变原始组件的单位如果可能的话?
@Andrew:请注意,只要祖先(第三方)组件的内存布局发生变化,此解决方案就会中断。你可能没有注意到它会中断,因为没有任何东西会提醒你。或者你可能会看到虚假的错误行为(如果你幸运的话:访问违规),因为你开始覆盖不属于你的数据。 – 2010-10-28 15:50:07
@Jeroen Pluimers我已经注意到Andrew关于这个事实。但是这个问题没有其他解决方案。 – oodesigner 2010-10-28 16:14:04
类助手可以做到这一点,没有黑客攻击,看到我的答案:) – 2012-07-07 22:19:47