当前位置:  开发笔记 > 编程语言 > 正文

与相互使用的类的循环引用问题

如何解决《与相互使用的类的循环引用问题》经验,为你挑选了1个好方法。

我有以下两个类:

TcmTPDataPanel = class(TcmTPBasePanel)
    Database: TnxDatabase;
    Session: TnxSession;
  private
    FDataConnector: TcmTPDataConnector;
    MyNxDataBase: TnxDatabase;
    MyNxSession: TnxSession;
    MyRefNxDataBase: TnxDatabase;
  protected
    procedure Disconnect; virtual; abstract;
    procedure Refresh; virtual;
    procedure Requery; virtual; abstract;
  public
    procedure Connect;
  published
    property DataConnector: TcmTPDataConnector read FDataConnector write
        FDataConnector;
  end;


TcmTPDataConnector = class(TComponent)
  private
    FDatabase: TnxDatabase;
    FObservers: TList;
    FTableForCategories: TnxTable;
    FTableForItemCategoryLinks: TnxTable;
    FTableForItems: TnxTable;
    procedure SetTableForItemCategoryLinks(const Value: TnxTable);
  protected
    procedure IterateObservers;
  public
    constructor Create;
    destructor Destroy; override;
    procedure Register(Instance: TcmTPDataPanel);
    procedure Unregister(Instance: TcmTPDataPanel);
  published
    property Database: TnxDatabase read FDatabase write FDatabase;
    property TableForCategories: TnxTable read FTableForCategories write
        FTableForCategories;
    property TableForItemCategoryLinks: TnxTable read
        FTableForItemCategoryLinks write SetTableForItemCategoryLinks;
    property TableForItems: TnxTable read FTableForItems write FTableForItems;
  end;

TcmDataPanel是(第3代)TFrame后代.它不是直接使用的,而是多个其他化合物成分从中下降.

TcmDataConnector是一个包含这些其他组件的数据库连接信息的组件.

我正在使用ModelMaker,并且正在尝试实现Observer模式,以便每当"数据连接器"更改状态时,可以自动更新多个"数据面板".

这是我的问题:我似乎无法解决"循环引用"问题,因为每个类在接口部分使用另一个.在接口部分中放置关联的"使用"引用不会清除"未声明的标识符"问题,并且将它们放在同一单元中也不会.现在他们在同一个单元(我已经在不同的单元中一起尝试过它们),并且我得到了"未声明的标识符:TcmTPDataConnector"错误.

我怎么能绕过这个?

================
更新:

这是星期五晚上9点30分,我在那里,我完全陷入困境.在我的帖子发布后,你们节省了一天!(晚上!)谢谢!

男人,我喜欢StackOverflow ....所以我的朋友在这个疯狂的学习季节.: ) 谢谢你,谢谢你,谢谢你...



1> J.C. Inacio..:

在同一台设备上,尝试以下方法:

TcmTPDataConnector = class(TComponent);


TcmTPDataPanel = class(TcmTPBasePanel)
   ... 
end;

TcmTPDataConnector = class(TComponent)
  ...
end;

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有