我需要修復第三方組件。這個組件的類有積極使用其子孫私有變量: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