我有一個類TDevice。一些設備將具有蜂窩模塊。所以我創建了一個Interface IIMEI。其他設備將具有以太網模塊。所以我創建了一個Interface IMacAddress。我可以創建一個從類和Delphi中的接口繼承的類嗎?
所以,我想創建另一個類是TDevice的孩子,並實現IIMEI或IMacAddress或兩者。
在Delphi中可能嗎?
我有一個類TDevice。一些設備將具有蜂窩模塊。所以我創建了一個Interface IIMEI。其他設備將具有以太網模塊。所以我創建了一個Interface IMacAddress。我可以創建一個從類和Delphi中的接口繼承的類嗎?
所以,我想創建另一個類是TDevice的孩子,並實現IIMEI或IMacAddress或兩者。
在Delphi中可能嗎?
最簡單的選擇是從TInterfaced對象派生TDevice,並用其他方法擴展你的後代。但請注意接口引用計數,否則最終會出現大量意外的訪問衝突。
或者,您可以編寫一個從TInterfacedObject下載的包裝對象,並將接口的實現委託給TDevice後代。在這種情況下,引用計數不會成爲問題。
TMacAddressWrapper = class(TInterfacedObject, IMacAddress)
private
FDevice: TDevice;
property Device: TDevice read FDevice implements IMacAddress;
public
constructor Create(_Device: TDevice);
end;
constructor TMacAddressWrapper.Create(_Device: TDevice);
begin
inherited Create;
FDevice := _Device;
end;
+1。但我不認爲你的替代解決方案確實有助於ref計數 - 問題是不同的,因爲只要包裝引用計數大於0,就必須確保fDevice不會被釋放。使用接口的恕我直言當採用自動生命週期管理的全部優勢時最好完成,混合解決方案遲早會破裂。 – mghie 2009-07-01 16:45:04
此問題的標記是不幸的 - 迄今只有8個視圖。除非有一些版本特定的問題,否則最好標記「delphi」,即使這樣「delphi」也應該在那裏。 – mghie 2009-06-28 08:34:32