Class_Initialize 更改(针对 Visual Basic 6.0 用户)

更新:2007 年 11 月

构造函数是创建对象时要运行的方法。构造函数是 Visual Basic 的新功能。它们组合了 Visual Basic 6.0 的 New 语句和 Class_Initialize 方法的行为,但在创建类实例方面提供了更大的灵活性和更多控制。有关对象创建的更多信息,请参见 创建和使用对象

Class_Initialize

Visual Basic 6.0

Visual Basic 6.0 通过 Class_Initialize 方法提供对构造函数概念的支持。此方法为私有方法,且不允许带任何参数。创建类的新实例时自动调用该方法。对 New 关键字的调用将调用 Class_Initialize 方法(如果存在)。

假定您要指定默认值为 5 年的树的年生长量。类代码应如下所示:

' 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 关键字

其他资源

创建和使用对象