Share via


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"

Weitere Ressourcen

Erstellen und Verwenden von Objekten