Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

Void main ( )

{

Application::Run (gcnew MainClass ());

>

C++/CLI. Программа на языке C++/CLI требует не только указания об ис-

пользовании требуемых пространств имен библиотек классов с помощью using,

но и подключения этих библиотек с помощью операторов #using. Управ-

ляемый класс MainClass помечается словом ref. Используются двоеточия и

стрелки. Функция main() пишется с маленькой буквы.

Как просто получается приложение с классом Form библиотеки .NET

Framework, как просто создаётся порождением из этого базового класса наш

класс MainClass прикладного окна в примере 10.3.3. Но сам класс Form сло-

жен. Он содержит множество свойств, событий и интерфейсных функций, с

некоторыми из которых мы познакомимся позднее. Взгляните на рис.

10.3.1.1. Оказывается, класс Form сам наследует множество других классов,

каждый из которых обогащает его функциональность. Как любой другой

класс библиотеки .NET Framework, класс Form наследует корневой базовый

класс Object, позволяющий всем объектам в системе сравниваться друг с

другом, воспользовавшись функцией Equals() этого класса, или получать

описание любого объекта с помощью функции ToString(). Обратим особое

внимание на класс Control, включающий богатый набор свойств, событий и

функций, которые наследуются не только классом окна, но многими другими

классами, объекты которых, как и объекты окна, должны обладать общим

поведением управляющих элементов (controls). Потом мы рассмотрим такие

управляющие элементы, как кнопки и редакторы, классы которых наследуют

также класс Control. Мы скоро убедимся, что объекты окон, кнопок и редак-

торы содержат не только одноимённые свойства Size, Text, применённые в

примерах 10.3.1 и 10.3.3, но и многие другие свойства, например, Location,

Name, Visible и др.

I *Form ] f~>l +ContalnerControl I ^+ScrollableControl 1 t^ *ControT~

Рис. 10.3.1.1. Наследование классов классом Form

Пакеты, содержащие классы языка Java, отличается от библиотеки .NET

Framework языков C# и C++/CLI. Отличаются и наследования классов, в чём

убеждает рис. 10.3.1.2. В языке Java классу Control библиотеки .NET

Framework соответствует класс Component. Этот класс Component включает

свойства setSize(), getSize(), setLocation0, getLocation(), setVizible(), setName,

getName() и др., используемых при создании интерфейсных элементов. Но в

отличие от класса Component языка Java класс Component библиотеки .NET

Framework используется иначе - он применяется при разработке так назы-

I +Qbjfirt fd l*MarehalByRefOhjgrt КЗ i*Campnnent

ваемых объектов компонентов, из которых создаются многокомпонентные

программы в соответствиями с рекомендациями компонентно-

ориентированного программирования. Посему необходимо отличать эти од-

ноимённые, но функционально разные классы.

I *Frame~i D^ *Wlndow I DH+Cnntainar I Й*СотиопвпЛ~С>Г~*0Ыес1 I

Рис. 10.3.1.2. Наследование классов классом Frame

10.4. Сообщения Windows, события и делегаты

Важно понять, что Windows - операционная система с управляемой со-

общениями архитектурой. Windows находится в постоянном ожидании того,

когда же пользователь подведёт указатель мыши к элементу в прикладном

окне приложения и нажмёт на левую клавишу мыши или передвинет ползу-

нок, или нажмёт клавишу клавиатуры и т. д. Windows тотчас генерирует со-

ответствующее сообщение и помещает его в системную очередь сообщений

приложения. Каждое сообщение имеет свой идентификатор и с ним может

быть связана какая-либо информация (например, координаты указателя мы-

ши в прикладном окне). Имеется более сотни стандартных сообщений Windows.

Для каждого стандартного сообщения (события) есть обработчик со-

общения (события) по умолчанию - специальная функция, которая обычно

ничего не делает. Но мы можем реализовать свою обработку сообщения, пе-

реопределив требуемую функцию-обработчика для этого сообщения.

C# и C++/CLI. Сообщения выполняются в рамках окон, то есть форм, и для

связи функций-обработчиков с сообщениями используется механизм со-

бытий и делегатов. Посредством делегатов к событиям привязывают тре-

буемые функции-обработчики определённого формата.

Каждая форма или управляющий элемент (который также является формой,

но специализированной) имеет фиксированный набор предопределённых со-

бытий с предопределённьши делегатами, которые определяют формат

функций-обработчиков этих событий.

При желании для простоты можно воспользоваться предопределённьши об-

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

Java и J#. Обработка событий основана на делегировании обработчиков с

помощью интерфейсов. Вместо делегатов используются предопределённые

интерфейсы и включённые в них обработчики.

Итак, реализация обработки событий в языках C# и Java отличаются; она рас-

смотрена в разделах 10.4.1 и 10.4.2 на примере обработки события от мыши.