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

delphi – 如何避免循环单元参考?

发布时间:2020-12-15 10:08:29 所属栏目:大数据 来源:网络整理
导读:想象下面两种棋牌游戏: TChessBoard = classprivate FBoard : array [1..8,1..8] of TChessPiece;...end;TChessPiece = class abstractpublic procedure GetMoveTargets (BoardPos : TPoint; Board : TChessBoard; MoveTargetList : TList TPoint);...end;
想象下面两种棋牌游戏:
TChessBoard = class
private
  FBoard : array [1..8,1..8] of TChessPiece;
...
end;

TChessPiece = class abstract
public
   procedure GetMoveTargets (BoardPos : TPoint; Board : TChessBoard; MoveTargetList : TList <TPoint>);
...
end;

我想让这两个类在两个单独的单元ChessBoard.pas和ChessPiece.pas中定义.

如何避免我遇到的圆形单元参考(在其他单元的界面部分需要每个单元)?

解决方法

将定义TChessPiece的单位更改为如下所示:
TYPE
  tBaseChessBoard = class;

  TChessPiece = class
    procedure GetMoveTargets (BoardPos : TPoint; Board : TBaseChessBoard; ...    
  ...
  end;

然后修改定义TChessBoard的单元如下所示:

USES
  unit_containing_tBaseChessboard;

TYPE
  TChessBoard = class(tBaseChessBoard)
  private
    FBoard : array [1..8,1..8] of TChessPiece;
  ...
  end;

这样就可以将具体的实例传递给棋子,而无需担心循环引用.由于董事会私人使用Tchesspieces,所以在Tchesspiece声明之前,它并不一定存在,就像持有人一样.当然,tChessPiece必须知道的任何状态变量都应该放在tBaseChessBoard中,两者都可以使用.

(编辑:李大同)

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

    推荐文章
      热点阅读