мне нужно разработать следующий класс диаграммы:
Я написал код, но есть проблемы с единичной ссылкой круговой.Циклическая ссылка между классом
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'
Любые идеи, как решить эту проблему?.
Это правая королевская боль в прикладе. Программисты, знакомые с другими языками, задаются вопросом, о чем мы говорим. Почему это даже проблема? Циркулярные ссылки приводят вас неумолимо к тому, чтобы весь ваш код был в одном устройстве. Вы когда-нибудь задумывались, почему исходные файлы Delphi имеют тенденцию быть настолько большими? Посмотрите на некоторые из блоков VCL. Полные монстры. В немалой степени именно поэтому исполняемые файлы Delphi настолько огромны по размеру.Последние изменения RTTI сделали это еще хуже. Конечно, вы можете использовать интерфейсы для разрыва зависимостей. Но это классическая собака с хвостом. Он дует. –