|
Программирование >> Проектирование интерфейса пользователя
Статические члены класса отличаются от остальных и периодом жизни . Обычные свойства и методы доступны только после создания объектов класса и исключительно в контексте последних. Но к статическим членам класса разрешается обращаться и в отсутствие объектов. Листинг 21.6 демонстрирует пример использования статического члена класса. Листинг 21.6. Пример объявления и использования статического члена класса 1: Static Property Ge ueID( ) As Integer 2: Dim ID As Integer 3: ID = ID + 1 4: Uniqueld = ID 5 : End Property При каждом выполнении программы, содержащей данный код, значение переменной ID увеличивается на 1. Это значение хранится в период между обращениями к UniquelD. Статические атрибуты класса допускают самое разнообразное применение и оказываются довольно необходимыми, например, для хранения уникальных идентификаторов базы данных или экземпляров класса. Используйте квалификатор Static на уровне свойства, когда требуется, чтобы все переменные свойства были статическими. Обработчики событий создания и удаления объекта В каждом классе содержатся две предопределенные процедуры, которые можно использовать для задания последовательности действий, выполняемых в ответ на события инициализации и удаления объекта. Процедура инициализации обрабатывает событие создания объекта, а код обработчика собгтия удаления объекта вызтвается, когда переменной-объекту присваивается значение Nothing. Эти процедуры срабатывают только в то чае, если в них содержится какой-либо код. Явно вызывать их не следует. Подпрограммы обработки событий создания и удаления объекта носят стандартные название itialize rminate. Чтобы получить возможность создания кода любой из них, выполните следующие действия. 1. Откройте окно редактора Microsoft Visual Basic. 2. Выберите существующий или создайте новый модуль класса. 3. Откройте список Object, расположенный в левой верхней части окна (в нем изначально отображается слово (General)), и выберите элемент Class (рис. 21.1). 4. Откройте список Procedure, находящийся в правой верхней части окна (см. рис. 21.1), и выберите один из элементов - Initialize или Terminate - в зависимости от того, обработкой какого события, создания объекта либо его удаления вы намерены заниматься. В результате выполнения указанной инструкции вы получите пустой шаблон обработчика. Остается самая малость - наполнить его. Процедура Class Initialize - как раз то место, где удобно расположить фрагмент кода, который должен выполняться в момент создания объекта, срабатывать раньше других блоков кода и/или действовать только один раз. Код процедур erminate выполняется в последнюю очередь, непосредственно перед удалением объекта из памяти. Естественно, он также срабатывает один раз. contacts (contacts) : K40 Public Fuuctiio IcdsxCfNa-re (ByVal Karee Ал 5trice> InteflnJ Dim I fts lEtegfer Гаг 1 ~ 1 finoffJ .Саавс If (iBStrll, atrtnosd). Non ) > 0} Then iQdezOfifainc - I Той rahcliJii .. ; -- End 3ub End ЗиЬ Cad Sab Private Sab SaiseError(ByVal Нзо Ra String) Err.Raise TbCtojeccError + lOCO, -Strings.els-, Hsg End Sab Puc. 21.1. Окно редактора Visual Basic позволяет быстро составить шаблоны обработчиков системных событий создания и удаления объектов класса Названия рассмотренных именованных блоков кода достаточна ачны - процедура удобна для выполнения некоторых операций инициализации, например открытие баз данных или иных файлов; а обработчик class Terminate - как раз то место, где имеет смысл располагать директивы закрытия баз данных, файлов и т.п. Пример использования процедуры Class Initialize содержится в листинге 21.7, приведенном в следующем разделе. Создание нового класса Натоящий раздел посвящен рассмотрению примера построения реального и - с моей точки зрения - полезного. Класс, которому дано название FileStream, реализует механизм файлового потокового ввода-вывода. Методы класса обеспечивают интерфейс, удобный для выполнения операций открытия и закрытия файлов, чтения и записи текстовых данных, перемещения к заданной позиции внутри файла. Листинг 21.7 содержит полное определение класса FileStream. Листинг 21.7. Класс, реализующий операции файлового потокового ввода-вывода streaming class Option Compare Database FileStream.Bas Defines a file-management Copyright © 1999. All Rights Reserved. By Software Conceptions, Inc. Written by Paul Kimmel, Okemos, MI USA 800-471-5890 Option Explicit 7: Private FFileName As String 8: Private FHandle As Double 9: Private Type Buffer 10: S As String 11:End Type 12:Public Property Get Count( ) As Long 13: Count = FileLen( FileName ) 14:End Property 15:Public Property Get FileName( ) As String 16: FileName = FFileName 17:End Property 18:Public Property Let FileName( ByVal Value As String ) 19: FFileName = Value 20:End Property 21:Public Property Get Handle( ) As Double 22: Handle = FHandle 23:End Property 24:Public Property Get Position( ) As Long 25: Position = Seek( FHandle ) 26:End Property 27:Public Property Let Position( ByVal Value As Long ) 28: Call SeekStream( Value ) 29:End Property 30: Private Sub CheckFile( ByVal FileName As String ) 31: If (FiieFxists ( FileName ) = False) Then 32: Err.Raise 1, Me, Invalid filename & FileName 33: End If 34:End Sub 35:Private Sub Class Initialize { ) 36: FHandle = 0 37:End Sub 38:Public Sub CloseStream( ) 39: Close #FHandle 40: FHandle = 0 41:End Sub 42:Private Function FileExists(ByVal FileName As String) As Boolean 43: FileExists = Len( Dir( FileName ) ) > 0 44:End Function 45:Public Sub OpenStream( ByVal FileName As String ) 46: FFileName = FileName 47: FHandle = FreeFile 48: Open FileName For Random As #FHandle Len = 1 49: End Sub 50:Public Sub ReadStream(ByVal Str As String, ByVal Length As Long) 51: Dim I As Integer 52: Dim Buf As Buffer 53: For I = 1 To Length 54: Get #FHandle, , Buf 55: Str = Str + Buf.S 56: Next I 57:End Sub 58:Public Sub SeekStream( ByVal Length As Long ) 59: On Error GoTo EXCEPT 60: Seek #FHandle, Length 61: Exit Sub 62: EXCEPT: 63: If (Length = 0) Then Resume Next
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |