我有以下两类:

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是保存用于这些其它组分数据库连接信息的组件。

我使用MM中,并想实现一个观察者模式使得多个“数据面板”可自动更新每当“数据连接器”改变状态。

下面是我的问题:我似乎无法避开“循环refernece”的问题,因为每个类的接口部分使用其他。把在接口部分相关的“使用”引用不清理“未申报的标识”的问题,并把他们都在同一个单位确实没有。现在他们都在同一单位(我尝试过不同的装置,并一起),我也得到了“未声明的标识符:TcmTPDataConnector”的错误。

我怎样才能解决这个问题?

=====结果 UPDATE:

这是星期五晚上在下午9:30我在哪里,我是完全卡住。短短几分钟内我的帖子后,你的人化险为夷! (夜!)谢谢!

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

有帮助吗?

解决方案

在同一单元中,尝试以下方法:

TcmTPDataConnector = class(TComponent);


TcmTPDataPanel = class(TcmTPBasePanel)
   ... 
end;

TcmTPDataConnector = class(TComponent)
  ...
end;

其他提示

另一种选择是使用的接口,但我认为在这种情况下,它会被过度设计。

有两个选项:

1)把它们在同一个单元中,其内的相同类型块。远期声明TcmTPDataConnector,声明其他类型的再申报。 (参见jcinacio的交)

2)使包含什么需要可在外部,使您的引用是该TcmTPDataConnector的祖先。这更是一个头疼的,但可以让你在多个单位做到这一点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top