【问题标题】:Can I create a class that is inherited from a class and from interfaces in Delphi?我可以创建一个从类和 Delphi 中的接口继承的类吗?
【发布时间】:2010-11-05 14:17:23
【问题描述】:

我有一个类 TDevice。一些设备将具有蜂窝模块。所以我创建了一个接口IIMEI。其他设备将具有以太网模块。所以我创建了一个接口 IMacAddress。

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

在 Delphi 中可以吗?

【问题讨论】:

  • 这个问题的标签很不幸 - 到目前为止只有 8 个视图。除非有一些特定于版本的问题,否则最好标记“delphi”,即使这样,“delphi”也应该存在。

标签: delphi inheritance interface


【解决方案1】:

最简单的选择是从 TInterfaced Object 派生 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。但我不认为您的替代解决方案确实有助于参考计数 - 问题只是不同,因为只要包装器参考计数> 0,就必须确保 fDevice 不被释放。恕我直言,使用接口是最好在充分利用自动生命周期管理时完成,混合解决方案迟早会崩溃。
猜你喜欢
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-11
  • 2016-04-11
相关资源
最近更新 更多