【发布时间】:2009-02-05 10:23:50
【问题描述】:
如果我在基类上实现一个接口,它会被它的子类继承吗,我知道函数/过程会,但我更感兴趣的是我是否能够将子类转换为接口,然后回到原来的类。
我希望我能做的是将不同基类的对象传递给一个函数,然后在函数中确定类型并酌情使用它们。
这可能吗?这是正确的方法吗?
更新
为了帮助消除任何混乱(或创造更多),这是我想做的(精简到其核心)。
界面
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 甚至可能来自要求付款的外部班级。
这只是一个例子。
【问题讨论】:
-
我更正了你的类定义,因为它是递归的。如果不是您的意思,请随意撤消它,但我很确定我是对的。
-
请同时修复接口,IMyInterface 和 ITransferable 都有。
-
感谢提醒,已修复
标签: delphi oop delphi-2007