加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 我有两个单元,每个单元中有一个需要彼此运行的类.如何

发布时间:2020-12-15 09:39:04 所属栏目:大数据 来源:网络整理
导读:我有2个类,ClassA和ClassB,每个类都在它们自己的单独单元UnitA和UnitB中. UnitA使用UnitB.这允许ClassA调用ClassB的构造函数.但是,ClassB的部分功能需要使用ClassA的方法.我无法使UnitB使用UnitA,否则会导致循环引用.在允许ClassB从UnitB中访问ClassA的方法
我有2个类,ClassA和ClassB,每个类都在它们自己的单独单元UnitA和UnitB中.

UnitA使用UnitB.这允许ClassA调用ClassB的构造函数.但是,ClassB的部分功能需要使用ClassA的方法.我无法使UnitB使用UnitA,否则会导致循环引用.在允许ClassB从UnitB中访问ClassA的方法时,我还有什么办法?

解决方法

这很大程度上取决于两个类如何相互使用.如果一个类在实现中使用另一个类而不是接口,那么您可以将uses子句中的该单元从接口部分向下移动到实现部分.

这可以解决这个问题:

UnitA;

interface

uses
  Classes,UnitB;

type
  TClassA = class(TObject)
  end;

...

.

UnitB;

interface

uses
  Classes;

type
  TClassB = class(TObject)
  end;

implementation

uses
  UnitA;

...

但是,如果两个类的接口彼此依赖,那么您别无选择,只能将两个类放在同一个单元中(并使用前向声明).

UnitA;

interface

uses
  Classes;

type
  TClassA = class;
  TClassB = class;


  TClassA = class(TObject)
  end;

  TClassB = class(TObject)
  end;

...

在极少数情况下,您甚至可以将整个类定义向下移动到实现.如果您需要在其他地方实际使用该类,那么这将没有用.

UnitB;

interface

implementation

uses
  Classes,UnitA;

type
  TClassB = class(TObject)
  end;

...

根据复杂性,通常的做法是将共同的代码放在它自己的独立单元中.例如常量,记录数组类型,全局变量等.这个公共单元不得使用这些单元中的任何其他单元.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读