Delphi 我可以将基类型转换为派生接口类型吗?

Delphi 我可以将基类型转换为派生接口类型吗?,delphi,soap,interface,Delphi,Soap,Interface,我可以将基本接口类型转换为派生接口吗 我怎样才能像德尔福一样赚钱 Delphi生成代码/Delphi 7: 函数TXMLBook.Get_Id:IXMLId; 开始 结果:=ChildNodes['id']作为IXMLId; 结束; ChildNodes['id']是基类型IXMLNode IXMLId是从IXMLNode派生的类型 我的示例代码是: 类型 IBase=接口(I接口) [{5CEA3668-36CB-444C-8D3E-06644070A2B4}] 功能测试:AnsiStrin

我可以将基本接口类型转换为派生接口吗

我怎样才能像德尔福一样赚钱

Delphi生成代码/Delphi 7:

函数TXMLBook.Get_Id:IXMLId;
开始
结果:=ChildNodes['id']作为IXMLId;
结束;
ChildNodes['id']是基类型IXMLNode

IXMLId是从IXMLNode派生的类型

我的示例代码是:

类型
IBase=接口(I接口)
[{5CEA3668-36CB-444C-8D3E-06644070A2B4}]
功能测试:AnsiString;
结束;
TBase=类别(TInterfacedObject,IBase)
功能测试:AnsiString;
结束;
IDerived=接口(IBase)
[{8CDB2982-43B0-4636-B6F5-2561C0D419A9}]
功能测试2:解析;
结束;
TDerived=类(TBase,IDerived)
功能测试:AnsiString;
功能测试2:解析;
结束;
{TBase}
功能测试:应答;
开始
结果:=‘基础测试’;
结束;
{TDerived}
功能验证。测试:AnsiString;
开始
结果:=‘衍生测试’;
结束;
函数TDerived.Test2:AnsiString;
开始
结果:=‘派生测试2’;
结束;
程序TForm1.按钮1单击(发送方:TObject);
变量
b:IBase;
d:理想驱动;
开始
b:=TBase.Create;
d:=b,如图所示;//错误:不支持接口
ShowMessage(b.Test);
结束;

您的
TBase
类当前未实现
IDerived
,它只实现
IBase
。 您的
t派生的
类实现了
IBase
(通过继承
TBase
)和
IDerived
(显式地)

你也应该

  • 将您的
    TBase
    声明更改为

    TBase=class(TInterfacedObject、IBase、Idrive)

    并在
    TBase
    中实现
    IDerived
    方法

  • 或更改
    b:=TBase.Create
    b:=t导出。创建
    
    
    谢谢@Lieven。德尔菲是如何做到这一点的,你知道吗?我不知道这些类将在以后生成。@zgn-我不确定我是否理解您的评论。这是一个问题还是一个观察结果?事实上,我正在尝试类似于Delphi的代码。对于最顶级的delphi示例,您能说些什么呢?delphi使用IXMLNode、IXMLCollectionList基本接口。但是函数可以导出不同的类型。另一个例子:。我想学习如何做到这一点?我看不出您提供的链接有什么特别之处,但您必须记住,接口不能像对象那样真正从中继承。确实,
    IDerived
    IBase
    继承方法签名,但这并不意味着实现
    IDerived
    的对象也隐式实现
    IBase