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