gpt4 book ai didi

delphi - Delphi中隐藏的嵌套记录信息

转载 作者:行者123 更新时间:2023-12-01 23:04:55 25 4
gpt4 key购买 nike

我有一个相对复杂的数据结构需要建模。我想用 Delphi 中的记录结构来完成此操作,并且该结构足够复杂,足以证明将其拆分为嵌套记录是合理的。一个简化的例子:

    type
TVertAngle = record
strict private
fDecDegrees: Double;
fDegrees: integer;
fMinutes: integer;
fDeciSeconds: integer;
function GetAngle: Double;
function GetRadians: Double;
public
Valid: Boolean;
procedure SetAsString(const Value: string; const AngleType: TInfoUnits);
property DecDegrees: Double read GetAngle;
property Radians: Double read GetRadians;
end;

~~~~ other sub record declarations ~~~~~~

TDataRecord = record
strict private
fHorzDistance: Double;
fLeicaData: TRawMessageData;
fUpdateTime: TDateTime;
function DecodeGsi8(GsiWord: string): TGSiWord;
function DecodeGsi16(GsiWord: string): TGSiWord;
public
GsiWord: TGSiWord;
Valid: Boolean;
InputMode: TDataModes;
HorzAngle: THorzAngle;
VertAngle: TVertAngle;
HorzRange: TDistance;
SlopeRange: TDistance;
PrismOffset: TConstants;
~~~~ other sub record instances~~~~~~
function SetMessage(RawMessage: string): Boolean;
~~~~ more stuff ~~~~~~

我目前已在单元的接口(interface)部分声明了所有这些。我希望只有主记录结构对使用该单元的任何内容都是可见的,并且目前所有子记录也是可见的。如果我将记录声明移至实现部分,则会出现编译器错误。如何重组以便在主记录之前声明子记录但不发布子记录?

最佳答案

您可以执行以下操作之一:

1) 在单独的“子单元”中声明“子记录”,因此只有在“uses”子句中声明“子单元”时,“子记录”类型才可用。这并不完全是您正在寻找的,因为“子记录”可以对其他单元可见,但它提供了一定程度的隐藏,因为必须明确声明“子单元”才能达到“子记录”定义。

2) 将“子记录”声明为私有(private)嵌套类型,如下所示:

type
TMainRec = record
private type
TSubRec = record
FSubField: Integer;
procedure SubMethod;
end;
private
FSubRec: TSubRec;
end;

implementation

{ TMainRec.TSubRec }

procedure TMainRec.TSubRec.SubMethod;
begin
...
end;

关于delphi - Delphi中隐藏的嵌套记录信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2303286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com