如果我在基类上实现一个接口,它将被它的子类继承,我知道函数/过程将是,但我更感兴趣的是我是否能够将子类转换为接口,然后再转换回它的接口原班。
我希望我能做的是将不同基类的对象传递给一个函数,然后在函数中确定类型并酌情使用它们。
这可能吗?这是正确的方法吗?
更新
为了帮助消除任何混乱(或创造更多),这是我想做的(精简到其核心)。
界面
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
我已经更新了代码,所以更好地展示我所追求的。
//这里的代码部分与传递给它的对象几乎没有关系,例如,如果这个类是 TAccounts 并且它被传递了一个 TEmployee 对象,它可能会在那里支付每周工资,但如果它是一个 TInvoice 那么它会检查看看是否需要付款,并且仅在截止日期前 2 天付款。
TEmployee/TInvoice 甚至可能来自要求付款的外部班级。
这只是一个例子。