Описание:
Директива Default используется в двух отдельных, и
весьма разных случаях для задания обработки по умолчанию свойств.
Вариант 1.
Когда у
вас есть одно или более свойство, которое использует индекс в качестве параметра
(см. пример и Index для дальнейших деталей), вы можете определить директиву
Default. Она предлагает более компактный способ использования свойства.
Вместо:
myValue :=
MyObject.GetItem(23);
Мы можем использовать:
myValue := MyObject[23];
Это может
сделать код более компактных и читабельным, но может ввести в недоумение
новичков в Delphi - они увидят, что MyObject - это не массив, и им будет трудно
найти механизм работы этого. Особенно если класс большой.
Вариант 2.
Имеет
намного более специализированную область применения. Она сохраняет заданное
порядковое значение по умолчанию для свойства класса в информации времени
выполнения этого класса. Ее использование выходит за рамки Основ Delphi.
Пример кода:
// Full Unit code.
//
-----------------------------------------------------------
// You must
store this code in a unit called Unit1 with a form
// called Form1 that has
an OnCreate event called FormCreate.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,
Dialogs;
type
// Class with Indexed properties
TRectangle =
class
private
fCoords:
array[0..3] of Longint;
function GetCoord(Index:
Integer): Longint;
procedure SetCoord(Index:
Integer; Value: Longint);
public
property Left : Longint Index 0 read GetCoord write SetCoord;
property Top : Longint Index 1 read GetCoord write SetCoord;
property Right : Longint Index 2 read GetCoord
write SetCoord;
property Bottom : Longint Index 3
read GetCoord write SetCoord;
property
Coords[Index: Integer] : Longint
read GetCoord write SetCoord;
Default;
end;
// The form class itself
TForm1 = class(TForm)
procedure
FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// TRectangle
property 'Getter' routine
function TRectangle.GetCoord(Index: Integer):
Longint;
begin
// Only allow valid index values
if (Index >= 0) and (Index <= 3)
then
Result := fCoords[Index]
else Result := -1;
end;
//
TRectangle property 'Setter' routine
procedure TRectangle.SetCoord(Index,
Value: Integer);
begin
// Only allow valid index values
if (Index >= 0) and (Index <= 3)
then
fCoords[Index] := Value;
end;
// Main line code
procedure
TForm1.FormCreate(Sender: TObject);
var
myRect :
TRectangle;
begin
// Create my little rectangle
myRect := TRectangle.Create;
// And set
the corner coordinates
myRect.Left := 22; // Left using direct
method
myRect.Top := 33;
myRect.SetCoord(2,44); // Right using indexed method
myRect.SetCoord(3,55);
// Get the first two coords using
the get method name
ShowMessage('myRect coord 0 =
'+intToStr(myRect.GetCoord(0)));
ShowMessage('myRect coord 0 =
'+intToStr(myRect.GetCoord(1)));
// Now use the more
compact version to get the remaining coords
// This is only
possible when we have a 'default' indexed property
ShowMessage('myRect coord 1 = '+intToStr(myRect[2]));
ShowMessage('myRect coord 1 = '+intToStr(myRect[3]));
end;
end.
Результат выполнения:
myRect coord 0 = 22
myRect coord 1 = 33
myRect coord 2 = 44
myRect coord 3 = 55