Każda właściwość ma specyfikator read, specyfikator write, lub obydwa. Są one zwane specyfikatorami dostępu i mają postać:
read fieldOrMethod write fieldOrMethod
gdzie fieldOrMethod jest nazwą pola lub metody zadeklarowanej jako właściwość w tej samej klasie, lub w klasie-przodku.
W przykładzie:
property Color: TColor read GetColor write SetColor;
metoda GetColor musi być zadeklarowana jako:
function GetColor: TColor;
zaś metoda SetColor musi mieć jedną z poniższych postaci deklaracji:
procedure SetColor(Value: TColor); procedure SetColor(const Value: TColor);
(Nazwą parametru metody SetColor, oczywiście, nie musi być Value.)
Kiedy do właściwości odwołuje się wyrażenie, jej wartość jest odczytywana przez użycie pola lub metody wymienionej w specyfikatorze read. Kiedy wykonywane jest podstawienie wartości do właściowści, wartość ta jest zapisywana poprzez użycie pola lub metody wymienionej w specyfikatorze write.
Ponizszy przykład deklaruje klasę TCompass z opublikowaną właściwością Heading. Wartość Heading jest czytana z pola FHeading i zapisywana za pośrednictwem procedury SetHeading .
type THeading = 0..359; TCompass = class(TControl) private FHeading: THeading; procedure SetHeading(Value: THeading); published property Heading: THeading read FHeading write SetHeading; ... end;
Mając tę deklarację, instrukcje:
if Compass.Heading = 180 then GoingSouth; Compass.Heading := 135;
odpowiadają następującym:
if Compass.FHeading = 180 then GoingSouth; Compass.SetHeading(135);
W klasie TCompass, z odczytem właściwości nie wiąże się żadna inna czynność; operacja czytania składa sie z wydobycia wartości przechowywanej w polu FHeading. Z drugiej strony, podstawienie wartości do właściwości Heading przekładane jest na wywołanie metody SetHeading, która, przypuszczalnie, zapamiętuje nową wartość w polu FHeading, jak i może przeprowadzać inne czynności. Przykład: SetHeading może być zaimplementowane następująco:
procedure TCompass.SetHeading(Value: THeading); begin if FHeading <> Value then begin FHeading := Value; Repaint; // uaktualnienie wyglądu aplikacji end; end;
Właściwość, której deklaracja zawiera tylko specyfikator read jest właściwością tylko do odczytu (read-only), zaś sam specyfikator write czyni właściwość tylko do zapisu (write-only). Próba podstawiania wartości do właściwości tylko do odczytu, jak i próba odczytu właściwości tylko do zapisu jest błędem.