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;
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.