YES! Bằng cách sử dụng một thủ thuật!
Đầu tiên khai báo một loại mới. Tôi sử dụng một loại bản ghi thay vì một lớp vì các bản ghi dễ sử dụng hơn một chút.
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;
Với RECORDTYPE xác định, bây giờ bạn cần phải thực hiện một chút mã:
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;
Với kiểu được khai báo, bây giờ bạn có thể bắt đầu sử dụng nó:
var
Arr: TMyArray;
begin
Arr := TMyArray.Create(2, 10);
Arr[2] := 10;
Đó là thực sự là một thủ thuật đơn giản để tạo mảng với một phạm vi cụ thể và bạn có thể làm cho nó linh hoạt hơn nếu bạn muốn. Hoặc chuyển đổi nó thành một lớp học. Cá nhân, tôi chỉ thích các bản ghi cho các loại đơn giản này.
Nguồn
2010-10-27 11:00:36