Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Создание пользовательских классов

На языке Visual Basic можно создавать определенные пользователем типы (user-defined types) <$I[]определенный пользователем тип (user-defined type)>, называемые классами. Объектно-ориентированное программирование базируется на трех ключевых технологиях: инкапсуляции, наследовании (форма повторного использования кода, при которой новые классы создаются из существующих, поглощая их атрибуты и поведение дополняя эти классы новыми свойствами и методами) и полиморфизме (возможность для объектов разных классов, связанных наследованием, реагировать на различным образом на вызов одной и той же функции-члена). Visual Basic поддерживает инкапсуляцию и полиморфизм, но не позволяет наследовать классы, как С++ или Java. С другой стороны, Visual Basic дает возможность реализовать многие элементы наследования посредством интерфейсов (interfaces) и техники, называемой делегированием (delegation).

В Visual Basic класс создается построением модуля класса (class module) <$I[]модуль класса (class module)>. Модуль класса содержит только код. Модули класса имеют только два события — Initialize <$I[]событие Initialize> и Terminate <$I[]событие Terminate>.

Программно класс может состоять из следующих элементов кода:

Для добавления модуля класса к проекту следует выбрать Project | Add Class Module, а затем в диалоговом окне Add Class Module щелкнуть значок Class Module (рис.8.10).

 

Рис. 8.10.

Диалоговое окно Add Class Module

В окне Project Explore появится дополнительная папка — Class Modules (рис.8.11). Эта папка будет хранить все файлы классов проекта. По умолчанию модулю класса присваивается имя ClassN (Class1 — для первого модуля класса проекта). При помощи свойства Name следует дать модулю класса более зн а чимое имя. Переименуйте модуль класса, назвав его, например, WinDOS (это будет именем класса).

Рис. 8.11.

Папка Class Modules будет хранить все файлы классов проекта

Чтобы создать в качестве примера новый класс, его, конечно, нужно сначала разработать, а еще раньше должна возникнуть необходимость в новом классе. В литературе по С++ обычно приводятся примеры создания классов для простых геометрических фигур (точки, линии, прямоугольники и т.д.). В данной книге вопросы работы с графикой не рассматриваются вообще, поскольку автор не считает, что Visual Basic является удобным инструментом для написания графических приложений.

Рассмотрим пример использования функций CharToOemA и OemToCharA и библиотеки динамической компоновки (Dynamic link libraries, DLL) — набор функций и процедур, доступных всем приложениям Windows — для преобразования текстовой строки из Win- в DOS-кодировку и обратно.

Прежде чем вы сможете использовать функцию из библиотеки DLL, вы должны указать, где найти DLL-файл и какие аргументы нужны этой функции. Для этого следует ввести оператор Declare <$I[] Declare > на уровне модуля, то есть перед любыми объявлениями процедур в модуле. В зависимости от того, является ли процедура функцией (Function) или подпрограммой (Sub), используйте одну из следующих форм:

Синтаксис

Declare [Pubic|Private] Function Name Lib " LibName " [Alias AliasName ] (Arguments) [As Type ]

Declare [Pubic|Private] Sub Name Lib " LibName " [Alias AliasName ] (Arguments) [As Type ]

Так же как с переменными и VB-константами, вы можете объявить DLL-процедуру либо как Public (чтобы сделать ее доступной всем модулям во всех проектах), либо как Private (чтобы сделать ее доступной только тому модулю, в котором она объявлена).

Name — имя процедуры; LibName — имя DLL-файла, например "USER32". Если имя процедуры совпадает с ключевым словом Visual Basic или с именем переменной, объявленной как Public, вы не сможете использовать оригинальное имя процедуры в своем коде. Вместо этого используйте AliasName (псевдоним) для определения другого имени процедуры.

Arguments — это список аргументов, требующихся процедуре. Этот список имеет следующий синтаксис:

[Optional][ByVal|ByRef][ParamArray] VarName [As Type ]

Ключевое слово Optional указывает на то, что аргумент не является обязательным. Ключевое слово ByVal означает, что аргумент передается по значению (для большей части DLL-процедур). Ключевое слово ByRef означает, что аргумент передается по ссылке. ParamArray используется с массивами данных типа Variant. Аргумент, объявленный как ParamArray, должен быть последним в списке аргументов; нельзя использовать ParamArray в комбинации с Optional, ByVal или ByRef. VarName — имя аргумента, а Type определяет тип данных аргумента.

Следующий оператор, например, объявляет функцию с именем MessageBeep из DLL User32.exe[1]:

Declare Sub MessageBeep Lib "USER32" (ByVal BeepType As Integer)

Сразу после объявления процедуры DLL, вы можете использовать ее в VB-коде, как любую другую процедуру (Sub или Function).

Функция CharToOemA конвертирует текстовую строку из Win- в DOS-кодировку. Оператор Declare, объявляющий функцию CharToOemA:

Declare Function CharToOemA Lib "user32"

(ByVal lpszSrc As String, ByVal lpszDst As String) As Long

Аргумент lpszSrc — строка в Win-кодировке, lpszDst — строка в DOS-кодировке.

Функция OemToCharA конвертирует текстовую строку из DOS- в Win-кодировку. Оператор Declare, объявляющий функцию OemToCharA:

Declare Function OemToCharA Lib "user32"

(ByVal lpszSrc As String, ByVal lpszDst As String) As Long

Нашей задачей будет создание класса, объекты (экземпляры) которого будут содержать всего два свойства типа String, одно из которых будет содержать текст в Win-кодировке, а другое — в DOS-кодировке. Как только одно из свойств объекта получит значение, другое — также должно получить значение, но в противоположной кодировке.

Объявление функций функций CharToOemA и OemToCharA можно объявлять в обычном модуле (не в модуле класса). Для этого его нужно добавить к проекту, выбрав Project | Add Module. Далее следует вставить в этот модуль следующий код:

Листинг 8.6. Код модуля с объявлением DLL-функций CharToOemA и OemToCharA

1 'объявление DLL-функций для перекодировки

3 Declare Function CharToOemA Lib "user32" _

4 (ByVal lpszSrc As String, ByVal lpszDst As String) As Long

6 Declare Function OemToCharA Lib "user32" _

7 (ByVal lpszSrc As String, ByVal lpszDst As String) As Long




Дата добавления: 2015-09-12; просмотров: 15 | Поможем написать вашу работу | Нарушение авторских прав

Объекты | Использование объектов | Использование объектных переменных | Использование объектов других приложений | Заполнение формы Word-документа из VB-кода |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.012 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав