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

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

Создание свойств класса

Для свойств разрабатываемого класса можно использовать как открытые (общедоступные), так и закрытые переменные. В последнем случае для считывания и записи данных класса (закрытых свойств) используются процедуры с зарезервированными наименованиями Property Get и Property Let.

Использование в качестве свойств класса открытых переменных проще, чем закрытых, однако при этом не используются существенные преимущества закрытых переменных, поскольку невозможно будет осуществить контроль за тем, какие значения присваиваются свойсвам класса. Использование же закрытых переменных в качестве свойств класса позволяет полностью контролировать процесс присвоения данным объекта разрабатываемого класса их значений. При этом, в частности, можно указывать на недопустимые значения. Например, если вы разрабатываете класс, связанный с хранением и обработкой данных времени, то можно учесть, что переменные, хранящие значения часов, минут и секунд, не могут быть больше числа 60.

Объявим в модуле класса две закрытые переменные mStrWin (строка для хранения значения в Win-кодировке) и mStrDOS (строка для хранения значения в DOS-кодировке):

Private mStrWin As String

Private mStrDOS As String

Далее для каждой переменной создадим процедуры, предназначенные для чтения данных:

Public Property Get StrWin() As String

StrWin = mStrWin

End Property

 

Public Property Get StrDOS() As String

StrDOS = mStrDOS

End Property

Каждая из процедур возвращает значение соответствующей закрытой переменной. Например, если переменная A объявлена как WinDOS, то для выдачи ее свойства mStrWin в диалоговом окне функции MsgBox следует использовать оператор:

MsgBox A.StrWin

Процедуры Property Get должны быть немного сложнее, так как при присвоении какому-либо свойству значения мы сразу же будем изменять и второе свойство объекта, преобразуя его при помощи одной из функций CharToOemA или OemToCharA:

Public Property Let StrWin(ByVal StrWinNew As String)

 

Dim code As Long

 

mStrWin = StrWinNew

'перекодировка в DOS:

mStrDOS = Space(Len(mStrWin))

code = CharToOemA(mStrWin, mStrDOS)

 

End Property

 

 

Public Property Let StrDOS(ByVal StrDOSNew As String)

 

Dim code As Long

 

mStrDOS = StrDOSNew

'перекодировка в DOS:

mStrWin = Space(Len(mStrDOS))

code = OemToCharA(mStrDOS, mStrWin)

 

End Property

На этом содание простого класса заканчивается, и можно его тестировать. Создадим форму для тестирования нового класса:

Рис. 8.12.

Форма для тестирования класса WinDOS

Код модуля формы, представленный в листинге 8.7, обеспечивает ввод данных в текстовое окно Строка в Win-кодировке (верхнее текстовое окно) и при щелчке на кнопке Записать в DOS-окно (нижнее текстовое окно) выполняет код строк 8–9. Здесь свойству StrWin объекта Str1 присвается значение из верхнего текстового окна, а затем его свойство StrDOS выводится в нижнем текстовом окне. Можно анологичным образом вводить данные в нижнем окне, а перекодированную строку получать в верхнем.

Листинг 8.7. Код модуля формы для тестирования объекта класса WinDOS

1 'код модуля формы

3 Dim Str1 As WinDOS

5 Private Sub Command1_Click()

6 'записать значение свойства StrDOS в окно Text2

8 Str1.StrWin = Text1.Text

9 Text2.Text = Str1.StrDOS

11 End Sub

13 Private Sub Command2_Click()

14 'записать значение свойства StrWin в окно Text1

16 Str1.StrDOS = Text2.Text

17 Text1.Text = Str1.StrWin

19 End Sub

21 Private Sub Form_Load()

23 'создать объект WinDOS:

24 Set Str1 = New WinDOS

26 End Sub

На рис.8.13 приведен фрагмент работы с формой, предназначенной для тестирования класса WinDOS.

Рис. 8.13.

Фрагмент работы с формой, предназначенной для тестирования класса WinDOS

Функции Property Get и Property Let могут вообще не использоваться в классе, могут только возвращать или устанавливать значения закрытых данных, а могут нести еще б о льшую нагрузку, чем та, которую выполняют представленные здесь функции Property Let (не только устанавливают значение одной из закрытых переменных, но и используют функции перекодирования для другой переменной). Например, можно ограничить длины используемых строк и без «лишнего шума» отбрасывать лишние символы, как это показано в листинге 8.8.

Листинг 8.8. Модифицированный код модуля класса WinDOS

1 'код модуля класса

3 Option Explicit

5 Private mStrWin As String 'строка в Win-кодировке

6 Private mStrDOS As String 'строка в DOS-кодировке

7 Const mMaxLen = 10 'максимальная длина строки

9 Public Property Get StrWin() As String

10 StrWin = mStrWin

11 End Property

13 Public Property Get StrDOS() As String

14 StrDOS = mStrDOS

15 End Property

18 Public Property Let StrWin(ByVal StrWinNew As String)

19 Dim code As Long

20 '”бесшумное” отбрасывание “лишних” символов:

21 mStrWin = Mid(Trim(StrWinNew), 1, mMaxLen)

22 'перекодировка в DOS:

23 mStrDOS = Space(Len(mStrWin))

24 code = CharToOemA(mStrWin, mStrDOS)

26 End Property

29 Public Property Let StrDOS(ByVal StrDOSNew As String)

30 Dim code As Long

31 '”бесшумное” отбрасывание “лишних” символов:

32 mStrDOS = Mid(Trim(StrDOSNew), 1, mMaxLen)

33 'перекодировка в DOS:

34 mStrWin = Space(Len(mStrDOS))

35 code = OemToCharA(mStrDOS, mStrWin)

37 End Property

В общем случае класс, конечно, может состоять не только из функций Property Get и Property Let. Вы можете создавать для классов столько функций (процедур) обработки данных класса, сколько это необходимо для эффективного использования объектов, построенных на базе класса.

Поскольку автор книги не считает Visual Basic одной из лучших систем для разработки объектно-ориентированных приложений, на этом тема создания классов пользователя завершается, но вы можете найти в другой литературе довольно обширные сведения по данному вопросу, в том числе и по созданию коллекций и классов коллекций.

 


[1] Когда имя DLL-файла заканчивается цифрами 32, это означает, что DLL содержит 32-разрядный код. Каждый раз, когда у вас есть выбор, вы должны использовать в своем VB-коде 32-разрядные версии любой библиотеки DLL.




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

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


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