6.5.4 Методы класса

На верх  Назад  Вперёд

Методы класса определяются по ключевому слову Class перед объявлении процедуры или функции, как в следующем примере:

Class Function ClassName : String;

Методы класса могут не иметь экземпляра (т.е. не указывать на экземпляр класса) (в этом случае указывается тип (название класса)), но которые следуют правилам наследования класса. Они могут быть использованы для возврата информации о текущем классе, например, для регистрации класса или использования в фабрике классов. Поскольку экземпляр класса не может быть доступен, и не может вернуть информацию в подобных случаях.

Методы класса могут быть вызваны как внутри обычного метода, так и с использованием идентификатора класса (без создания экземпляра класса):

Var

AClass : TClass; // AClass имеет тип "type of class"

begin

..

// ClassName - функция клааса TObject, возвращает строковое имя класса

if CompareText(AClass.ClassName,'TCOMPONENT')=0 then

...

Можно вызвать метод и из экземпляра класса (метод ClassNameIs - метод (функция) класса, и он возвращает True если класс соответствует переданному типу (название типа - строковая константа)):

Var

MyClass : TObject;

begin

..

if MyClass.ClassNameis('TCOMPONENT') then

...

Обратное невозможно: Внутри метода класса, нельзя обратится к Self (точки таблицы VMT  класса). Никакие поля, свойства или обычные методы не доступны внутри метода класса. Попытка обращения к обычному свойству или методу (из метода класса) приведет к ошибке компиляции.

Обратите внимание, что методы класса объявленые как virtual (виртуальные) могут быть overridden (переопределены).

В обычных свойствах, для записи или чтения можно использовать методы классов, но естественно, эти свойства будут иметь это значение во всех экземплярах класса, так как экземпляр не доступен в методе класса.