O typach klas


Typ klasy musi być zadeklarowany przed jej pierwszym użyciem (zadeklarowaniem obiektów typu tej klasy). (Nie można deklarować klasy w obrębie deklaracji zmiennej). Deklaracja typu klasy może być umieszczana wyłącznie w części opisowej programu lub modułu, lecz nigdy w procedurach lub funkcjach.

Deklaracja typu klasy ma postać:

type className = class (ancestorClass)
                  memberList
                 end;
gdzie className jest poprawnym identyfikatorem, (ancestorClass) jest opcjonalne (jest to specyfikacja bezpośredniego przodka klasy className), memberList jest listą elementów (składników) — t.j. pól, metod i właściwości klasy. Jeśli (ancestorClass) zostanie pominięty, nowa klasa dziedziczy strukturę z predefiniowanej klasy TObject. Jeśli (ancestorClass) zostało zamieszczone a memberList jest pusta, można pominąć słowo end. Deklaracja klasy może zawierać listę zaimplementowanych interfejsów (...).

Metody pokazane w deklaracji są nagłówkami funkcji lub procedur bez ich definicji. Definicje zamieszcza się w dalszej części programu.

Przykład: poniżej jest deklaracja klasy TListColumns z modułu ComCtrls biblioteki VCL Delphi.

type

  TListColumns = class(TCollection)
  private
    FOwner: TCustomListView;
    function GetItem(Index: Integer): TListColumn;
    procedure SetItem(Index: Integer; Value: TListColumn);
  protected
    function GetOwner: TPersistent; override;
    procedure Update(Item: TCollectionItem); override;
  public
    constructor Create(AOwner: TCustomListView);
    function Add: TListColumn;

    property Owner: TCustomListView read FOwner;
    property Items[Index: Integer]: TListColumn read GetItem write SetItem; default;
  end;

TListColumns pochodzi od klasy TCollection (moduł Classes), dziedzicząc większość jej składników. Jednak definiowane—lub przedefiniowywane jest kilka metod i właściwości, łącznie z konstruktorem Create. Destruktor Destroy jest dziedziczony bez zmian z klasy TCollection. Każdy składnik jest deklarowany jako private (prywatny), protected (chroniony), lub public (publiczny) (ta klasa nie ma składników published (opublikowanych)) (...).

Można teraz wykreować obiekt typu TListColumns:

var ListColumns: TListColumns;
 ListColumns := TListColumns.Create(SomeListView);

gdzie SomeListView jest zmienną reprezentującą obiekt klasy TCustomListView.