2009-06-24 22 views
4

私はクラスTDeviceを持っています。一部のデバイスにはセルラーモジュールが搭載されています。だから私はインターフェイスIIMEIを作成します。他のデバイスにはイーサネットモジュールがあります。そこで私はインターフェイスIMacAddressを作成します。クラスから継承したクラスとDelphiのインターフェイスから継承するクラスを作成できますか?

したがって、私はTDeviceの子であり、IIMEIまたはIMacAddress、またはその両方を実装する別のクラスを作成したいと考えています。

デルファイでは可能ですか?

+1

この質問のタグ付けは残念でした - これまでの8つのビューしかありませんでした。バージョンに固有の問題がないかぎり、「delphi」にタグを付けるほうが良いでしょう。それでも「delphi」もそこにあるはずです。 – mghie

答えて

3

最も簡単なオプションは、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; 
+0

+1。しかし、私はあなたの代替ソリューションが本当にリファレンスカウントに役立つとは思っていません。問題はまったく異なります。ラッパーのリファレンスカウントが0より大きい限り、fDeviceが解放されないようにする必要があります。自動生涯管理を最大限に活用すると、ハイブリッドソリューションが早急に中断する傾向があります。 – mghie

関連する問題