В Паскале для классов реализована дополнительная возможность - обработка сообщений, получаемых от других объектов программы и от Windows. Для этого применяется ключевое слово message. Процедура, использующая эту директиву, будет вызываться, когда объект соответствующего класса получит сообщение с указанным идентификатором. Значение идентификатора должно лежать в диапазоне от 1 до 49151 в случае обычного обработчика сообщений или должно соответствовать одному из идентификаторов стандартных сообщений Windows, которые описаны в моду-ле Messages.
Если объект описан как ссылка на класс, то часто требуется применять этот объект как относящийся к конкретному типу, чтобы иметь доступ к его определенным полям и одам. Выполнить приведение к конкретному типу можно, применив операцию as:
Так как в Паскале допускается применять объекты, тип которых на этапе компиляции не известен, то в языке должны быть и средства, позволяющие выполнять проверки типов таких объектов.
Специальная операция is (ключевое слово) позволяет проверить, соот-ветствует ли тип объекта конкретному типу Паскаля.
В Паскале имеется возможность объявлять новый тип, являющийся ссылкой на класс:
type имя-класса = class of тип-класса;
Например:
type TMetaClass = class of TObject;
Переменная, описанная как
var MetaClass: TMetaClass;
Конструктор - это метод, который вызывается только один раз в момент создания экземпляра объекта соответствующего класса. Конструктор считается методом класса (class procedure), что позволяет вызывать его, указывая не только имя объекта, но и имя класса. Для конструктора выделено специальное ключевое слово constructor.
Ранее рассматривались перегружаемые подпрограммы, имеющие одинаковые имена, но различные типы параметров. Компилятор автоматически определяет, какую конкретно подпрограмму надо вызывать в зависимости от типов ее аргументов.
В некоторых случаях не имеет смысла выполнять реализацию опреде-ленных методов базового класса, например, когда все реализации некоторого метода сильно отличаются друг от друга, а метод родительского класса не ис-пользуется. Вместе с тем соответствующий метод обязан быть реализован в каждом из классов-наследников.
Такой метод надо объявить в родительском классе как абстрактный.
Статические методы удобны, когда в программе заранее известно, ка-кие типы объектов будут использоваться, и приведения типов, как правило, не требуется. В ряде случаев, особенно в крупных проектах, часто приходится хранить в переменных объекты-наследники (как в примере с ТСаr и TMAZ), причем конкретный тип этих объектов может быть неизвестен. Поэтому в Паскале реализован новый тип методов - виртуальные методы (для их описания существует зарезервированное слово virtual). Описать виртуальный метод можно так.
Все методы по умолчанию считаются статическими. Это означает, что их вызов будет происходить в соответствии с принципом полиморфизма.
Например, описаны два класса.
Во многих случаях большая часть функциональности наследуемых ме-тодов уже реализована в родительских классах. Например, при отображении кнопки на экране стандартный класс TButton уже выполняет основную работу по отрисовке ее изображения в окне. Если требуется создать кнопку, которая будет добавлять к своему изображению дополнительные декоративные элементы, то в методе, ответствененном за рисование кнопки, не имеет смысла полностью переписывать всю функциональность соответствующего метода.
Чтобы вызывать одноименный метод ближайшего родительского класса, достаточно в нужном месте метода указать ключевое слово inherited:
Разделы сайта
Облако тегов
Популярные новости
Наш опрос
Оцените работу движка
Лучший из новостных
Неплохой движок
Устраивает ... но ...
Встречал и получше
Совсем не понравился