Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sranaya_informatika.doc
Скачиваний:
24
Добавлен:
12.04.2015
Размер:
2.48 Mб
Скачать

Создание, жизнь и смерть объектов

    Создадим экземпляр нашего класса:

Dim myBlackBox As BlackBox

myBlackBox = New BlackBox()

    Теперь myBlackBox - это ссылка на новый экземпляр класса "Черный ящик". Попробуем вызвать его метод, поиграться со свойствами:

myBlackBox.Content = "Чашка, ложка, поварешка"

myBlackBox.Name = "Персональный ящик Васи Пупкина"

myBlackBox.OpenBox(false) ' Вызываем метод

' получаем значение свойства

MessageBox.Show(myBlackBox.Name & myBlackBox.Content)

    Так. Теперь вам понятны принципы работы объекта. Но, теперь усложним ситуацию - в момент создания ящика на нем вырезают его название, после этого что-либо изменить нельзя и название живет с ящиком всю его жизнь. Значит необходимо как-то заполнить переменную mBoxName в момент создания и не давать возможности изменять ее в дальнейшем. Для этого существуют конструкторы - методы класса, которые выполняются в момент создания объектов и позволяют заполнить экземпляр необходимыми данными. Проще всего рассмотреть этот процесс на примере. В Visual Basic .NET конструктор - это метод с названием, идентичным названию класса.И, что логично, конструктор не может возвращать значений и определяется ключевым словом Sub.

Public Class BlackBox

Private mBoxName As String

Private mBoxContent As String

Public Sub New(ByVal NewName As String)

mBoxName = NewName

End Function

Public Property Content() As String

Get

Return mBoxContent

End Get

Set(ByVal Value As String)

mBoxContent = Value

End Set

End Property

Public ReadOnly Property Name() As String

Get

Return mName

End Get

End Property

Public Function OpenBox(ByVal DropContent As Boolean)

End Function

End Class

    Теперь поведение класса несколько изменилось:

Dim myBlackBox As BlackBox

myBlackBox = New BlackBox("Мой персональный черный ящик")

MessageBox.Show(myBlackBox.Name)

    И при попытке присвоить свойству Name новое значение вы увидите сообщение об ошибке, так как свойство Name объявлено только для чтения (ReadOnly).

myBlackBox.Name = "Новое имя" ' здесь происходит ошибка

    Мы создали конструктор - метод, вызываемый при "рождении" объекта, логично предположить, что есть метод, который вызывается при уничтожении  объекта. Да, такой метод тоже есть, он называется деструктором и, в отличие от конструктора, не может быть переопределен (о переопределении методов см. раздел Переопределение методов).

Sub Finalize()

End Sub

    В этом методе выполняются основные действия: связанные с уничтожением созданных внутри объекта других объектов, закрытием открытых дескрипторов файлов, соединений с базами данных и многого другого, чем пользовался объект при жизни. Забыв освободить использованные ресурсы в этом методе, вы создаете такую неприятную штуку как "утечка ресурсов" (то есть, например, вы создали внутри объекта какие-то еще объекты, но потом забыли их уничтожить и они продолжают занимать ресурсы (память) и после уничтожения вашего основного объекта). Правда, стоит сказать, что среда .NET многое берет на себя. Но мы-то с вами изучаем ООП, а не конкретную реализацию в .NET.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]