Widoczność (dostępność) składników klas


Każdy składnik klasy posiada atrybut zwany widocznością (dostępnością), który jast wskazywany jednym z ze słów kluczowych: private, protected, public, published i automated. Na przykład, zapis:

published property Color: TColor read GetColor write SetColor;

deklaruje "opublikowaną" właściwość Color. Widoczność determinuje gdzie i jak składnik może być udostępniony. private (prywatny) reprezentuje najmniejszą dostępność, protected (chroniony) reprezentuje pośredni poziom dostępności, zaś public (publiczny), published (opublikowany) i automated (zautomatyzowany) reprezentuje najwyższy poziom dostępności.

Jeśli deklaracja składnika nie posiada wyspecyfikowanej widoczności, składnik ma widoczność taką samą jak składnik poprzedzający. Składniki bez specyfikacji widoczności występujące na początku deklaracji są domyślnie published (opublikowane) o ile kompilację wykonano z dyrektywą {$M+} lub klasa pochodzi od klasy skompilowanej z {$M+}. W przeciwnym wypadku takie składniki mają status public (publiczny).

Zalecane jest dla czytelności organizować deklaracje składników klasy grupując je w sekcje wg widoczności. Typowa deklaracja klasy powinna wyglądać tak:

type

  TMyClass = class(TControl)
  private
   ... { private declarations here}
  protected
   ... { protected declarations here }
  public
   ... { public declarations here }
  published
   ... { published declarations here }
  end;

Można zwiększyć widoczność składników klasy w klasach potomnych poprzez redeklarowanie ich, ale zmniejszenie widoczności jest niemożliwe. Na przykład: chroniona właściwość może być uczyniona publiczną w klasach potomnych, ale nie prywatną. Ponadto, opublikowane składniki nie mogą stać się publicznymi w typach potomnych.