【发布时间】:2016-08-24 23:01:15
【问题描述】:
当您的版本发生更改时,我需要从第三方下载两个或更多单元。
我使用 xml 数据绑定来生成单位。它们是:
unit tissV01;
interface
uses .....;
type
IXMLMensagemTISS = interface(IXMLNode)
['{11773827-F0A1-42E0-99E1-E221DFAF8542}']
{ Property Accessors }
end;
function GetmensagemTISS(Doc: IXMLDocument): IXMLMensagemTISS;
implementation
function GetmensagemTISS(Doc: IXMLDocument): IXMLMensagemTISS;
begin
Result := XXXX as IXMLMensagemTISS;
end;
end.
单位tissV02
unit tissV02;
interface
uses .....;
type
{ IXMLMensagemTISS }
IXMLMensagemTISS = interface(IXMLNode)
['{11773827-F0A1-42E0-99E1-E221DFAF8542}']
{ Property Accessors }
property Cabecalho: string read Get_Cabecalho;
end;
function GetmensagemTISS(Doc: IXMLDocument): IXMLMensagemTISS;
implementation
function GetmensagemTISS(Doc: IXMLDocument): IXMLMensagemTISS;
begin
Result := XXXX as IXMLMensagemTISS;
end;
end.
在我的应用中,我需要选择我必须使用的单位:
unit test;
interface
uses tissV01,tissV02, .......;
type
TMyform = class(TForm)
public
msg3:IXMLMensagemTISS;
end;
implementation
procedure TMyform.ExecuteMessage:
var
xmlTISS : TXmlDocument;
begin
xmlTISS := TXmlDocument.Create(nil);
if condition then
msg3 := tissV01.GetmensagemTISS(xmlTISS)
else msg3 := tissV02.GetmensagemTISS(xmlTISS);
with msg3.Cabecalho do something;
end;
end.
从逻辑上讲,它不起作用,因为 IXMLMensagemTISS 对两个单元都是通用的。
是否有一些解决方法可以在我不必更改接口名称 (IXMLMensagemTISS) 的情况下执行此操作?
我想简化我的代码,并且我需要在未来维护许多这种类型的单元。问题是所有都实现了 IXMLMensagemTISS,我无能为力。
我不想创建很多 msg 变量,例如 msgV01:=tissv01.GetmensagemTISS、msgV01:=tissv02.GetmensagemTISS 等等
【问题讨论】:
-
我不明白您为什么要在多个单元中声明相同的接口。在一个通用单元中声明一次,然后在整个程序中使用该单元。
-
因为,它不是我的。它来自其他开发人员。他在每个新版本中更改版本号,以及其他一些小事情。但是,除了版本号和一些函数结果值之外,我需要从该单元中使用的内容仍然相同。但我总是需要决定在运行时使用什么版本。
标签: delphi delphi-units