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