Quick start manual

7-18
Delphi Language Guide
Properties
Properties are defined by their access specifiers. Unlike fields, properties cannot be
passed as var parameters, nor can the @ operator be applied to a property. The reason
is that a property doesn’t necessarily exist in memory. It could, for instance, have a
read method that retrieves a value from a database or generates a random value.
Property access
Every property has a read specifier, a write specifier, or both. These are called access
specifiers and they have the form
read fieldOrMethod
write fieldOrMethod
where fieldOrMethod is the name of a field or method declared in the same class as the
property or in an ancestor class.
•If fieldOrMethod is declared in the same class, it must occur before the property
declaration. If it is declared in an ancestor class, it must be visible from the
descendant; that is, it cannot be a private field or method of an ancestor class
declared in a different unit.
•If fieldOrMethod is a field, it must be of the same type as the property.
•If fieldOrMethod is a method, it cannot be dynamic and, if virtual, cannot be
overloaded. Moreover, access methods for a published property must use the
default register calling convention.
•In a read specifier, if fieldOrMethod is a method, it must be a parameterless
function whose result type is the same as the property’s type. (An exception is the
access method for an indexed property or an array property. See “Index
specifiers” on page 7-21 and “Array properties” on page 7-20.)
•In a write specifier, if fieldOrMethod is a method, it must be a procedure that takes
a single value or const parameter of the same type as the property (or more, if it is
an array property or indexed property).
For example, given the declaration
property Color: TColor read GetColor write SetColor;
the GetColor method must be declared as
function GetColor: TColor;
and the SetColor method must be declared as one of these:
procedure SetColor(Value: TColor);
procedure SetColor(const Value: TColor);
(The name of SetColor‘s parameter, of course, doesn’t have to be Value.)