如何声明两个相互关联的类?

时间:2012-10-22 05:59:50

标签: delphi delphi-xe2

我有一个类似于this的问题,但是在delphi中。

type
  TThreadPopulator = class(TThread)
  private
    _owner:TASyncPopulator; //Undeclared identifier
  end;

type
  TAsyncPopulator = class
  private
    _updater: TThreadPopulator;
  end;

上述问题的解决方案不适用于delphi

3 个答案:

答案 0 :(得分:11)

请参阅Forward Declarations and Mutually Dependent Classes文档。

type (* start type section - one unified section "to rule them all" *)
  TAsyncPopulator = class; (* forward declaration *)

  TThreadPopulator = class(TThread)
  private
    _owner:TASyncPopulator;
  end;

  TAsyncPopulator = class (* final declaration - WITHIN that very section where forward declaration was made *)
  private
    _updater: TThreadPopulator;
  end;

使用来源,卢克!您的Delphi安装具有完整的VCL和RTL源,供您阅读,观看和学习。它经常使用这个模板。每次当你问自己“我怎么做”时,只要想想“Borland是怎么做的”,并且很有可能你已经在Delphi提供的资源中得到了一个现成的例子。

答案 1 :(得分:3)

在任何类定义之前使用它。转发类在Delphi 2010中工作。我不知道你有delphi的巫婆版本,但它是我能想到的唯一解决方案。

type   
 TAsyncPopulator = Class;

希望我帮助

答案 2 :(得分:0)

除了使用前向声明之外,您还可以创建一个子类来解决此问题:

TThreadPopulator = class(TThread)
  type 
    TAsyncPopulator = class 
      _updater: TThreadPopulator;  
    end;

  var 
    owner: TAsyncPopulator;
end;