Visibility of Class Members Every member of a class has an attribute called visibility, which is indicated by one of the reserved words private,
protected, public, published, or automated. For example,
published property Color: TColor read GetColor write SetColor;
declares a published property called
Color
. Visibility determines where and how a member can be accessed, with
private representing the least accessibility, protected representing an intermediate level of accessibility, and public,
published, and automated representing the greatest accessibility.
If a member's declaration appears without its own visibility specifier, the member has the same visibility as the one
that precedes it. Members at the beginning of a class declaration that don't have a specified visibility are by default
published, provided the class is compiled in the
{$M+}
state or is derived from a class compiled in the
{$M+}
state;
otherwise, such members are public.
For readability, it is best to organize a class declaration by visibility, placing all the private members together, followed
by all the protected members, and so forth. This way each visibility reserved word appears at most once and marks
the beginning of a new 'section' of the declaration. So a typical class declaration should like this:
type
TMyClass = class(TControl)
private
... { private declarations here }
protected
... { protected declarations here }
public
... { public declarations here }
published
... { published declarations here }
end;
You can increase the visibility of a member in a descendant class by redeclaring it, but you cannot decrease its
visibility. For example, a protected property can be made public in a descendant, but not private. Moreover, published
members cannot become public in a descendant class. For more information, see Property overrides and
redeclarations.