2009-06-24 58 views
4

我有一个类TDevice。一些设备将具有蜂窝模块。所以我创建了一个Interface IIMEI。其他设备将具有以太网模块。所以我创建了一个Interface IMacAddress。我可以创建一个从类和Delphi中的接口继承的类吗?

所以,我想创建另一个类是TDevice的孩子,并实现IIMEI或IMacAddress或两者。

在Delphi中可能吗?

+1

此问题的标记是不幸的 - 迄今只有8个视图。除非有一些版本特定的问题,否则最好标记“delphi”,即使这样“delphi”也应该在那里。 – mghie 2009-06-28 08:34:32

回答

3

最简单的选择是从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; 
+0

+1。但我不认为你的替代解决方案确实有助于ref计数 - 问题是不同的,因为只要包装引用计数大于0,就必须确保fDevice不会被释放。使用接口的恕我直言当采用自动生命周期管理的全部优势时最好完成,混合解决方案迟早会破裂。 – mghie 2009-07-01 16:45:04

相关问题