Изменения Class_Initialize для пользователей Visual Basic 6.0.
Обновлен: Ноябрь 2007
Конструктор является методом, который выполняется при создании объекта. Конструкторы — это новая возможность в Visual Basic. Они сочетают поведение оператора New и метода Class_Initialize версии Visual Basic 6.0, но предлагают большую гибкость и управление в создании экземпляров классов. Дополнительные сведения о создании объектов см. в разделе Создание и использование объектов.
Class_Initialize
Visual Basic 6.0
Visual Basic 6.0 обеспечивает поддержку концепции конструктора через метод Class_Initialize. Этот метод является закрытым и не разрешает параметры. Этот метод вызывается автоматически при создании нового экземпляра класса. Вызов ключевого слова New вызывает метод Class_Initialize, если он существует.
Предположим, нужно указать годовой рост дерева по умолчанию за пять лет. Код класса должен выглядеть примерно так:
' Visual Basic 6.0
Private mvarYearlyGrowth As Integer
Public Property Get YearlyGrowth() As Integer
YearlyGrowth = mvarYearlyGrowth
End Property
Public Property Let YearlyGrowth(ByVal newValue As Integer)
mvarYearlyGrowth = newValue
End Property
Private Sub Class_Initialize()
mvarHeight = 5
End Sub
Код для создания дерева и установка свойства будет выглядеть примерно так:
Dim growingTree As New Tree
growingTree.YearlyGrowth = 10
Visual Basic 2008
Visual Basic 2008 поддерживает конструкторы с помощью ключевого слова New. В этом случае дополнительный код для установки свойства YearlyGrowth не требуется. Вызов ключевого слова New вызывает один из перегруженных методов New в классе. Если класс не содержит метода New, тогда он создается без параметров компилятором.
Option Strict On
Public Class Tree
Private yearlyGrowthValue As Integer = 5
Public Property YearlyGrowth() As Integer
Get
Return yearlyGrowthValue
End Get
Set(ByVal Value As Integer)
yearlyGrowthValue = Value
End Set
End Property
Public Sub New(ByVal newYearlyGrowth As Integer)
Me.YearlyGrowth = newYearlyGrowth
End Sub
End Class
Код для создания дерева и установка свойства будет выглядеть примерно так:
Dim growingTree As New Tree(10)
В этом примере невозможно создать Tree без указания годового роста. Чтобы разрешить это, можно добавить дополнительный метод New к классу, который не имеет параметров. Это называется перегрузкой конструктора.
Ключевое слово New
Visual Basic 6.0
В Visual Basic 6.0 эту строку кода обычно не рекомендуется использовать:
Dim growingTree As New Tree
Это связано с тем, что каждый раз при обращении к переменной growingTree компилятор проверяет, является ли значение — Nothing. Если да, то создается новый экземпляр и назначается переменной growingTree. Это не только неэффективно, но ведет к ошибкам программирования.
Visual Basic 2008
В Visual Basic 2008 экземпляр не проверяется, и новый экземпляр не создается. Единственный способ создать новый экземпляр — это выполнить строку кода с ключевыми словами New или As New. На самом деле строка кода, приведенная выше, сейчас является рекомендуемым способом обработать создание нового экземпляра.
Советы по обновлению
Мастер обновления обновляет метод Class_Initialize до следующего кода:
'UPGRADE_NOTE: Class_Initialize was upgraded to Class_Initialize_Renamed. Click for more: ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1061"'
Private mvarHeight As Short
Private Sub Class_Initialize_Renamed()
mvarHeight = 0
End Sub
Public Sub New()
MyBase.New()
Class_Initialize_Renamed()
End Sub
Можно было бы удалить вызов метода Class_Initialize_Renamed и переместить код непосредственно в конструктор. Это сделало бы код более четким из-за удаления ненужного вызова процедуры. Если каждый вызов New, как правило, следует после установки отдельной группы свойств, рассмотрите возможность добавления конструктора, который задает эти свойства. Код Visual Basic 6.0 можно было бы заменить следующим кодом в Visual Basic 2008:
Public Sub New(ByVal newYearlyGrowth As Integer)
Me.YearlyGrowth = newYearlyGrowth
End Sub
См. также
Задачи
Практическое руководство. Использование ключевого слова New