Delphi 我可以将基类型转换为派生接口类型吗?
我可以将基本接口类型转换为派生接口吗 我怎样才能像德尔福一样赚钱 Delphi生成代码/Delphi 7: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
函数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
。