基本クラスにインターフェイスを実装すると、そのサブクラスに継承されます。関数/手順が継承されることはわかっていますが、サブクラスをインターフェイスにキャストしてからそのインターフェイスに戻すことができるかどうかにもっと興味がありますオリジナルクラス。
私ができることを望んでいるのは、さまざまな基本クラスのオブジェクトを関数に渡し、関数で型を決定し、必要に応じて使用することです。
これは可能ですか、それは正しいアプローチですか?
アップデート
混乱を解消する(またはさらに作成する)ために、ここで私がやりたいことを示します(その核心にストライプ化します)。
インターフェース
IMyInterFace = interface
['{B7203E50-F5CB-4755-9DB1-FB41B7B192C5}']
function MyFunction: Boolean;
end;
基本クラス
type TMyObject = class(TInterfacedObject,IMyInterFace)
サブクラス
type TSubMyObject = class(TMyObject)
別のクラス
type TMyOtherObject = class(TInterfacedObject,IMyInterFace)
それでは使い方
procedure foo();
var obj:TSubMyObject;
begin
obj := TSubMyObject.Create();
SendInterfaceObject(obj);
end;
procedure bar();
var obj:TMyOtherObject;
begin
obj := TMyOtherObject.Create();
SendInterfaceObject(obj);
end;
procedure SendInterfaceObject(iobj:IMyInterFace);
begin
if (iobj is TSubMyObject) then
begin
//code here
end
else if (iobj is TMyOtherObject) then
begin
//code here
end;
end;
更新 2
私はコードを少し更新したので、私がより良いものを示しています。
//code hereのセクションは、渡されるオブジェクトとはほとんど関係がありません。たとえば、このクラスが TAccounts で、TEmployee オブジェクトが渡された場合、毎週の支払いが行われる可能性がありますが、TInvoice の場合はチェックされます。支払いが必要かどうかを確認し、日付が締め切りの 2 日前になったときにのみ支払います。
TEmployee/TInvoice は、支払いを要求する外部クラスから来ることさえあります。
これはほんの一例です。