delphi - 类之间的循环引用

标签 delphi oop circular-reference

我需要开发下一个图表类: enter image description here
我编写了代码,但是存在循环单元引用的问题。

XmlFileManager 类包含:

unit XmlFileManager;
interface
uses
  xmldom, XMLIntf, msxmldom, XMLDoc, SysUtils, DateUtils, Classes, Dialogs,
  XmlEnpManager;
type
  TXmlFileManager = class
  private
    [...]
    xmEnp: TXmlEnpManager;
    xmEnpInicial: TXmlEnpManager;
    xmEnpFinal: TXmlEnpManager;
[...]
end.

抽象类,XmlNodeManager:

unit XmlNodeManager;
interface
uses
  xmldom, XMLIntf, msxmldom, XMLDoc, SysUtils, DateUtils, Classes, Dialogs,
  XmlFileManager;
type
  TXmlNodeManager = class
   protected
        { sgy alias para strategy }
        sgyIterator: Integer;
        sgyContext: TXmlFileManager;
        sgyAttributes: TStringList;
        sgyNode: IXMLNode;
[...]
end.

以及 XmlEnpManager 具体类:

unit XmlEnpManager;
interface
uses
  xmldom, XMLIntf, msxmldom, XMLDoc, SysUtils, DateUtils, Classes, Dialogs,
  XmlNodeManager;
type
  TXmlEnpManager = class (TXmlNodeManager)
    public
        constructor Create(aContext: TXmlFileManager); overload; override;
        constructor CreateInicial(aContext: TXmlFileManager); reintroduce; overload;
        constructor CreateFinal(aContext: TXmlFileManager); reintroduce; overload;
[...]
end.

构建失败并出现错误:

[dcc32 Fatal Error] XmlNodeManager.pas(7): F2047 Circular unit reference to 'XmlFileManager'

有什么想法可以解决这个问题吗?

最佳答案

TXmlFileManagerTXmlNodeManager 放在相同的 unit 和相同的 type 部分中,然后确保type 部分从此类开始:TXmlNodeManager = class;

参见官方文档:Forward Declarations and Mutually Dependent Classes .

unit XmlFileManagerAndXmlNodeManager;
interface
uses
  xmldom, XMLIntf, msxmldom, XMLDoc, SysUtils, DateUtils, Classes, Dialogs,
[...]

type
  TXmlNodeManager = class;

  TXmlFileManager = class
  private
    [...]
    xmEnp: TXmlEnpManager;
    xmEnpInicial: TXmlEnpManager;
    xmEnpFinal: TXmlEnpManager;
[...]

  TXmlNodeManager = class
   protected
        sgyIterator: Integer;
        sgyContext: TXmlFileManager;
        sgyAttributes: TStringList;
        sgyNode: IXMLNode;
[...]
end.

关于delphi - 类之间的循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18257745/

相关文章:

oop - Dart 中的抽象基类

sharepoint - 子类化 SharePoint 对象

.net - 使用 DispatcherObject.Dispatcher 时如何防止 MVVM 中的循环引用

database - 在不同表中使用相同字段名称的问题,特别是ID

html - 加载 HTML 源代码

python - 如何处理类层次结构中的Python装饰器?

javascript - 将具有循环引用的对象从服务器传递到客户端 Javascript,同时保持循环性

python - 如何解决这个 Python 导入循环引用

delphi - Vista 下带有编码组合框的文件打开对话框

delphi - 直接将字符串打印到打印机