gpt4 book ai didi

delphi - 如何在delphi中创建数组属性及其过程

转载 作者:行者123 更新时间:2023-12-03 19:47:36 25 4
gpt4 key购买 nike

我想在我的单元uFleet中创建一个数组属性,该属性将从另一个单元-uCubeF中读取信息。

这是我在uFleet中所做的:

Type
AUnits = array of array[1..3] of integer;

TFleet = class(TDummy)

private
FUnits: array of array[1..3] of integer;
procedure SetUnits(const value: array of array[1..3] of integer);

public

property Units: AUnits read FUnits write SetUnits;

end;


这是我应该从uCubeF读取数组的过程:

procedure TFleet.SetUnits(const value: array of array[1..3] of integer);
begin

FUnits:= value;

end;


我知道正确地执行数组属性需要使用索引。但是我对如何感到非常困惑。特别是当我将不得不在过程中使用索引时。

我应该如何更改我的代码?

最佳答案

有两种解决方案。数组属性或索引属性。

interface

type
TUnits = TArray<array[1..3] of Integer>;

// Array property
TFleet1 = class
private
FUnits: TUnits;
procedure SetUnits(const Value: TUnits);
public
property Units: TUnits read FUnits write SetUnits;
end;

// Index property
TFleet2 = class
private
FUnits: TUnits;

function GetUnit(Index1, Index2: Integer): Integer;
procedure SetUnit(Index1, Index2: Integer; Value: Integer);
public
procedure SetUnits(const Value: TUnits);

property Units[Index1, Index2: Integer]: Integer read GetUnit write SetUnit; default;
end;

implementation

{ TFleet1 }

procedure TFleet1.SetUnits(const Value: TUnits);
begin
FUnits := Value
end;

{ TFleet2 }

function TFleet2.GetUnit(Index1, Index2: Integer): Integer;
begin
// if need check index before return result
Result := FUnits[Index1, Index2];
end;

procedure TFleet2.SetUnit(Index1, Index2: Integer; Value: Integer);
begin
// if need check index before set value
FUnits[Index1, Index2] := Value;
end;

procedure TFleet2.SetUnits(const Value: TUnits);
begin
FUnits := Value;
end;

{ TestFleet }

procedure TestFleet();
var
I: Integer;
F1: TFleet1;
F2: TFleet2;
U: TUnits;
begin
SetLength(U, 10);

F1 := TFleet1.Create;
F1.Units := U;
I := F1.Units[0, 1];
F1.Units[0, 1] := 1;

F2 := TFleet2.Create;
F2.SetUnits(U);
I := F2.Units[0, 1];
F2[0, 1] := 1;
end;


两种解决方案都有其优点和缺点(尽管索引属性被认为是更好的)。要同时玩耍并选择您需要的那个。

关于delphi - 如何在delphi中创建数组属性及其过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49715885/

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