Очень полезным может быть оператор as в методах-обработчиках событий. Для обеспечения совместимости в 99% случаев источник события Sender имеет тип TObject, хотя в тех же 99% случаев им является форма или другие компоненты. Поэтому, чтобы иметь возможность пользоваться их свойствами, применяют оператор as:

(Smder as TControl) .Caption := "Thanks!";

Вся информация, описывающая класс, создается и размещается в памяти на этапе компиляции. Возникает резонный вопрос: а нельзя ли получить доступ к ней, не создавая экземпляр объекта? Да, можно. Доступ к информации класса вне методов этого класса можно получить, описав соответствующий указатель, который называется указателем на класс, или указателем на объектный тип (class reference). Он описывается при помощи зарезервированных слов class of. Например, указатель на класс TObject описан в модуле SYSTEM.PAS и называется TClass-.

type

TObject = class ;
TClass = class of TObject;

Аналогичные указатели уже описаны и для других важных классов. Вы можете ИСПОЛЪЭОВаТЬ В СВОЙ Программе TComponentClass, TControlClass и т. п.

Указатели на классы тоже подчиняются правилам приведения объектных типов. Указатель на класс-предок может ссылаться и на любые дочерние классы; обратное невозможно:

type TFirst = class

end;

TSecond = class(TFirst)

end;
TFirstClass = class of TFirst;
TSecondClass = class of TSecond;

var

AFirst : TFirstClass; ASecond : TSecondClass; begin AFirst := TSecond; {допустимо} ASecond := TFirst; (недопустимо} end.

С указателем на класс тесно связано понятие методов класса. Такие методы можно вызывать без создания экземпляра объекта - с указанием имени класса, в котором они описаны. Перед описанием метода класса нужно поставить зарезервированное слово class:

type

TMyObj ect = class (TObject)

class function GetSize: string; end; var

MyObject: TMyObject;

AString: string; begin AString := TMyObject.GetSize; MyObject := TMyObject.Create; AString := MyObject.GetSize; end.

Разумеется, методы класса не могут использовать значения, содержащиеся в полях класса: ведь экземпляра-то не существует. Возникает вопрос: для чего нужны такие методы?

Важнейшие методы класса определены в самом TObject: они как раз и позволяют, не углубляясь во внутреннюю структуру класса, извлечь оттуда практически всю необходимую информацию.

Резюме

В этой главе рассмотрены основы объектно-ориентированного программирования в Delphi. Объект обладает свойствами и методами, которые позволяют изменять значения свойств. Знание основ ООП необходимо для изучения всех глав не только этой части, но и всех последующих. Ведь компоненты Delphi - это объекты, размещенные в специальной библиотеке VCL. А ни одна глава этой книги не обходится без описания возможностей тех или иных компонентов.

Рассмотренные в данной главе возможности объектов используются при создании исходного кода приложений Delphi.

ГЛАВА 2

Библиотека визуальных компонентов VCL и ее базовые классы

Все классы библиотеки визуальных компонентов произошли от группы базовых классов, которые лежат в основе иерархии VCL. Самый общий предок компонентов - это класс TObject, инкапсулирующий простейший объект. Как известно (см. гл. 1), каждый объект наследует свойства и методы родительского класса. К объекту можно добавить новые свойства и методы, но нельзя удалить унаследованные. Объект-наследник в свою очередь может стать родительским для нового класса, который унаследует возможности всех своих предков.


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Июнь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс