Изменения 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

Другие ресурсы

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