【发布时间】:2023-03-25 18:13:01
【问题描述】:
我遇到了以下问题:
我有一个类,它是使用 Delphi 7 XML 数据绑定向导(新建 -> 其他 -> XML Databindng)从 xsd 文件生成的。
我需要想办法给生成的代码添加方法:
IXMLGlobeSettingsType = interface(IXMLNode)
['{9A8F5C55-F593-4C70-85D2-68FB97ABA467}']
{ Property Accessors }
function Get_General: IXMLGeneralSettingsType;
function Get_Projector: IXMLProjectorSettingsType;
function Get_LineMode: IXMLLineDrawingSettingsType;
{ Methods & Properties }
property General: IXMLGeneralSettingsType read Get_General;
property Projector: IXMLProjectorSettingsType read Get_Projector;
property LineMode: IXMLLineDrawingSettingsType read Get_LineMode;
//procedure SetDefault; {To be added}
end;
接口由对应的类实现,也是由向导生成的:
TXMLGlobeSettingsType = class(TXMLNode, IXMLGlobeSettingsType)
protected
{ IXMLGlobeSettingsType }
function Get_General: IXMLGeneralSettingsType;
function Get_Projector: IXMLProjectorSettingsType;
function Get_LineMode: IXMLLineDrawingSettingsType;
public
procedure AfterConstruction; override;
end;
并且为了定义我自己对生成代码的扩展,我定义了以下接口:
IDefaultable = interface
procedure SetDefault;
end;
具有以下实现类:
DefaultableXMLGlobeSettingsType = class(TXMLGlobeSettingsType, IDefaultable)
public
procedure SetDefault;
end;
然而,我刚刚意识到 Delphi 7 不允许我将一个接口转换为另一个接口(甚至从一个接口转换为一个对象)。所以下面的代码会报错:
defaultSettings : IDefaultable;
FGlobeSettingsIntf: IXMLGlobeSettingsType; // FGlobeSettingsIntf is in fact a DefaultableXMLGlobeSettingsType
// some code
defaultSettings := FGlobeSettingsIntf as IDefaultable; // error: operator not applicable to this operand type
我几乎被困在这里。如何绕过这个错误?在 Delphi 7 中有没有办法(甚至是丑陋的)将接口转换为一个对象,然后再转换回另一个接口。
【问题讨论】:
-
OK 接受了你的(抱歉 Uwe!)。
-
没关系!大卫是对的——没有什么好争论的。