YES! Mit einem Trick!
Zuerst einen neuen Typ deklarieren. Ich verwende einen Datensatztyp anstelle einer Klasse, da Datensätze ein wenig einfacher zu verwenden sind.
type
TMyArray = record
strict private
FArray: array of Integer;
FMin, FMax:Integer;
function GetItem(Index: Integer): Integer;
procedure SetItem(Index: Integer; const Value: Integer);
public
constructor Create(Min, Max: integer);
property Item[Index: Integer]: Integer read GetItem write SetItem; Default;
property Min: Integer read FMin;
property Max: Integer read FMax;
end;
Mit dem Record definiert, müssen Sie jetzt ein Stück Code implementieren:
constructor TMyArray.Create(Min, Max: integer);
begin
FMin := Min;
FMax := Max;
SetLength(FArray, Max + 1 - Min);
end;
function TMyArray.GetItem(Index: Integer): Integer;
begin
Result := FArray[Index - FMin];
end;
procedure TMyArray.SetItem(Index: Integer; const Value: Integer);
begin
FArray[Index - FMin] := Value;
end;
Mit dem Typ deklariert, können Sie es jetzt beginnen zu verwenden:
var
Arr: TMyArray;
begin
Arr := TMyArray.Create(2, 10);
Arr[2] := 10;
Es ist eigentlich ein einfacher Trick, um Arrays mit einem bestimmten Bereich zu erstellen, und Sie können es flexibler machen, wenn Sie möchten. Oder wandle es in eine Klasse um. Persönlich bevorzuge ich nur Datensätze für diese Arten von einfachen Typen.