共用方式為


Visual Basic 6.0 使用者可以進行的 Class_Initialize 變更

更新:2007 年 11 月

建構函式 (Constructor) 是建立物件時所執行的方法。建構函式為 Visual Basic 的新增項目,不僅結合了 Visual Basic 6.0 的 New 陳述式 (Statement) 和 Class_Initialize 方法,還可在建立類別 (Class) 執行個體時,提供更多的彈性和控制。如需物件建立的詳細資訊,請參閱建立和使用物件

Class_Initialize

Visual Basic 6.0

Visual Basic 6.0 會透過 Class_Initialize 方法,提供建構函式概念支援。這是私用 (Private) 方法,而且不允許使用任何參數。當建立類別的新執行個體時,就會自動呼叫這個方法。如果呼叫 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 方法,編譯器 (Compiler) 就會建立不含任何參數的方法。

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 方法。這就是所謂的「多載化」(Overloading) 建構函式。

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

請參閱

工作

HOW TO:使用 New 關鍵字

其他資源

建立和使用物件