Class_Initialize-Änderungen für Visual Basic 6.0-Benutzer
Aktualisiert: November 2007
Ein Konstruktor ist eine Methode, die beim Erstellen eines Objekts ausgeführt wird. Konstruktoren sind neu in Visual Basic. Sie vereinen das Verhalten der New-Anweisung und die Class_Initialize-Methode von Visual Basic 6.0, bieten jedoch mehr Flexibilität und Steuerungsmöglichkeiten beim Erstellen von Klasseninstanzen. Weitere Informationen über das Erstellen von Objekten finden Sie unter Erstellen und Verwenden von Objekten.
Class_Initialize
Visual Basic 6.0
Visual Basic 6.0 unterstützt das Konstruktorkonzept durch die Class_Initialize-Methode. Diese Methode ist privat und lässt keine Parameter zu. Sie wird automatisch aufgerufen, wenn eine neue Instanz der Klasse erstellt wird. Ein Aufruf des New-Schlüsselworts ruft die Class_Initialize-Methode auf, wenn diese vorhanden ist.
Angenommen, Sie möchten das jährliche Wachstum eines Baums mit einem Standardwert von fünf Jahren angeben. Der Klassencode würde etwa folgendermaßen aussehen:
' 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
Der Code zur Erstellung des Baums und zum Festlegen der Eigenschaft würde folgendermaßen lauten:
Dim growingTree As New Tree
growingTree.YearlyGrowth = 10
Visual Basic 2008
In Visual Basic 2008 werden Konstruktoren durch das New-Schlüsselwort unterstützt. In diesem Fall ist der zusätzliche Code zum Festlegen der YearlyGrowth-Eigenschaft nicht erforderlich. Ein Aufruf des New-Schlüsselworts ruft eine der überladenen New-Methoden in der Klasse auf. Wenn die Klasse keine New-Methode enthält, wird vom Compiler eine Klasse ohne Parameter erstellt.
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
Der Code zur Erstellung des Baums und zum Festlegen der Eigenschaft würde folgendermaßen lauten:
Dim growingTree As New Tree(10)
In diesem Beispiel ist es nicht möglich, Tree ohne Angabe des jährlichen Wachstums zu erstellen. Wenn Sie dies zulassen möchten, könnten Sie der Klasse eine weitere New-Methode hinzufügen, die keine Parameter hat. Dies wird als Überladen des Konstruktors bezeichnet.
New-Schlüsselwort
Visual Basic 6.0
In Visual Basic 6.0 wird im Allgemeinen empfohlen, diese Codezeile nicht zu verwenden:
Dim growingTree As New Tree
Grund hierfür ist, dass der Compiler bei jedem Zugriff auf die growingTree-Variable überprüft, ob diese den Wert Nothing hat. Ist dies der Fall, wird eine neue Instanz erstellt und growingTree zugewiesen. Dies ist nicht nur ineffizient, sondern führt zu Programmierfehlern.
Visual Basic 2008
In Visual Basic 2008 wird die Instanz nicht überprüft, und es werden keine neuen Instanzen erstellt. Eine neue Instanz kann nur erstellt werden, wenn eine Codezeile mit dem New-Schlüsselwort oder dem As New-Schlüsselwort ausgeführt wird. Somit stellt die obige Codezeile die empfohlene Vorgehensweise zur Erstellung einer neuen Instanz dar.
Vorschläge zur Aktualisierung
Der Aktualisierungs-Assistent aktualisiert die Class_Initialize-Methode folgendermaßen:
'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
Sie können den Aufruf von Class_Initialize_Renamed unter Umständen entfernen und den Code direkt in den Konstruktor verschieben. Dadurch wird der Code eventuell besser lesbar, da ein nicht benötigter Aufruf einer Prozedur entfällt. Wenn nach jedem Aufruf von New normalerweise eine bestimmte Gruppe von Eigenschaften festgelegt wird, sollten Sie erwägen, einen Konstruktor hinzuzufügen, mit dem diese Eigenschaften festgelegt werden. Der Visual Basic 6.0-Code könnte in Visual Basic 2008 durch folgenden Code ersetzt werden:
Public Sub New(ByVal newYearlyGrowth As Integer)
Me.YearlyGrowth = newYearlyGrowth
End Sub
Siehe auch
Aufgaben
Gewusst wie: Verwenden des Schlüsselworts "New"