Condividi tramite


Modifiche a Class_Initialize per gli utenti di Visual Basic 6.0

Aggiornamento: novembre 2007

Un costruttore è un metodo che viene eseguito quando si crea un oggetto. I costruttori rappresentano una nuova funzionalità di Visual Basic. I costruttori presentano le funzionalità dell'istruzione New e del metodo Class_Initialize di Visual Basic 6.0, offrendo in più una maggiore flessibilità e un controllo più efficiente nella creazione delle istanze delle classi. Per ulteriori informazioni sulla creazione degli oggetti, vedere Creazione e utilizzo di oggetti.

Class_Initialize

Visual Basic 6.0

In Visual Basic 6.0 il concetto di costruttore è implementabile mediante il metodo Class_Initialize. Questo metodo privato non accetta parametri e viene chiamato automaticamente quando si crea una nuova istanza della classe. L'utilizzo della parola chiave New provoca una chiamata al metodo Class_Initialize, se esiste.

Si supponga di voler specificare la crescita annua di un albero con un valore predefinito di cinque anni. Il codice della classe potrebbe essere analogo al seguente:

' 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

Il codice per creare un albero e impostare la proprietà sarebbe analogo a quello riportato di seguito:

Dim growingTree As New Tree
growingTree.YearlyGrowth = 10

Visual Basic 2008

In Visual Basic 2008 i costruttori sono implementabili mediante la parola chiave New. In questo caso, il codice aggiuntivo per impostare la proprietà YearlyGrowth non è necessario. L'utilizzo della parola chiave New provoca una chiamata a uno dei metodi in overload New della classe. Se la classe non prevede alcun metodo New, il compilatore ne crea uno privo di parametri.

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

Il codice per creare un albero e impostare la proprietà sarebbe analogo a quello riportato di seguito:

Dim growingTree As New Tree(10)

In questo esempio non è consentito creare un oggetto Tree senza specificare la crescita annua. Per permettere ciò è possibile aggiungere alla classe un altro metodo New privo di parametri. Per definizione, ciò corrisponde a un overload del costruttore.

Parola chiave New

Visual Basic 6.0

Si sconsiglia di utilizzare la seguente riga di codice in Visual Basic 6.0:

Dim growingTree As New Tree

Infatti ogni volta che si accede alla variabile growingTree, il compilatore verifica se il valore è Nothing. In questo caso, viene creata una nuova istanza che viene assegnata alla variabile growingTree. Questo modo di procedere, oltre a essere inefficiente, porta a errori di programmazione.

Visual Basic 2008

In Visual Basic 2008, poiché il compilatore non verifica l'istanza, non vengono create nuove istanze. L'unico modo di creare una nuova istanza è eseguire una riga di codice contenente la parola chiave New o As New. Di fatto, la precedente riga di codice è attualmente il metodo consigliato per la gestione della creazione di una nuova istanza.

Suggerimenti per l'aggiornamento

Mediante la procedura di aggiornamento guidato è possibile aggiornare il metodo Class_Initialize nel modo descritto di seguito:

'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

È possibile eliminare la chiamata al metodo Class_Initialize_Renamed e spostare direttamente il codice nel costruttore. Probabilmente in questo modo il codice diventa più leggibile poiché si elimina un'inutile chiamata a una routine. Se si verifica spesso che a ogni chiamata al metodo New segue l'impostazione di uno specifico gruppo di proprietà, può risultare vantaggioso aggiungere un costruttore che imposti tali proprietà. Il codice in Visual Basic 6.0 potrebbe essere sostituito dal codice in Visual Basic 2008 riportato di seguito:

Public Sub New(ByVal newYearlyGrowth As Integer)
    Me.YearlyGrowth = newYearlyGrowth
End Sub

Vedere anche

Attività

Procedura: utilizzare la parola chiave New

Altre risorse

Creazione e utilizzo di oggetti