Deklaration von Objektvariablen (Visual Basic)
Sie verwenden eine normale Deklarationsanweisung, um eine Objektvariable zu deklarieren. Für den Datentyp geben Sie entweder Object
(d. h. den Objektdatentyp) oder eine spezifischere Klasse an, aus der das Objekt erstellt werden soll.
Das Deklarieren einer Variablen als Object
entspricht der Deklarierung als System.Object.
Wenn Sie eine Variable mit einer bestimmten Objektklasse deklarieren, kann sie auf alle Methoden und Eigenschaften zugreifen, die von dieser Klasse und den Klassen verfügbar gemacht werden, von denen sie erbt. Wenn Sie die Variable mit Object deklarieren, kann sie nur auf die Member der Object-Klasse zugreifen, es sei denn, Sie aktivieren Option Strict Off
, um späte Bindungen zuzulassen.
Deklarationssyntax
Verwenden Sie die folgende Syntax, um eine Objektvariable zu deklarieren:
Dim variablename As [New] { objectclass | Object }
Sie können auch Public, Protected, Friend, Protected Friend
, Private, Shared oder Static in der Deklaration angeben. Die folgenden Beispieldeklarationen sind gültig:
Private objA As Object
Static objB As System.Windows.Forms.Label
Dim objC As System.OperatingSystem
Späte Bindung und frühe Bindung
Manchmal ist die spezifische Klasse unbekannt, bis der Code ausgeführt wird. In diesem Fall müssen Sie die Objektvariable mit dem Datentyp Object
deklarieren. Dadurch wird ein allgemeiner Verweis auf einen beliebigen Objekttyp erstellt, und die spezifische Klasse wird zur Laufzeit zugewiesen. Dies wird als späte Bindung bezeichnet. Eine späte Bindung erfordert zusätzliche Ausführungszeit. Außerdem wird Ihr Code auf die Methoden und Eigenschaften der Klasse beschränkt, die Sie zuletzt zugewiesen haben. Dies kann Laufzeitfehler verursachen, wenn Ihr Code versucht, auf Member einer anderen Klasse zuzugreifen.
Wenn Sie die spezifische Klasse zur Kompilierungszeit kennen, sollten Sie die Objektvariable als dieser Klasse zugehörig deklarieren. Dies wird als frühe Bindung bezeichnet. Frühe Bindungen verbessern die Leistung und garantieren den Codezugriff auf alle Methoden und Eigenschaften der spezifischen Klasse. Wenn die Variable objA
in den vorangegangenen Beispieldeklarationen nur Objekte der Klasse System.Windows.Forms.Label verwendet, sollten Sie As System.Windows.Forms.Label
in ihrer Deklaration angeben.
Vorteile der frühen Bindung
Die Deklaration einer Objektvariablen als eine bestimmte Klasse hat mehrere Vorteile:
Automatische Typüberprüfung
Garantierter Zugriff auf alle Member der spezifischen Klasse
Microsoft IntelliSense-Unterstützung im Code-Editor
Verbesserte Lesbarkeit des Codes
Weniger Fehler in Ihrem Code
Fehler werden zur Kompilierzeit und nicht zur Laufzeit erfasst
Schnellere Codeausführung
Zugriff auf Elemente von Objektvariablen
Wenn Option Strict
On
ist, kann eine Objektvariable nur auf die Methoden und Eigenschaften der Klasse zugreifen, mit der Sie sie deklarieren. Dies wird anhand des folgenden Beispiels veranschaulicht.
' Option statements must precede all other source file lines.
Option Strict On
' Imports statement must precede all declarations in the source file.
Imports System.Windows.Forms
Public Sub accessMembers()
Dim p As Object
Dim q As System.Windows.Forms.Label
p = New System.Windows.Forms.Label
q = New System.Windows.Forms.Label
Dim j, k As Integer
' The following statement generates a compiler ERROR.
j = p.Left
' The following statement retrieves the left edge of the label in pixels.
k = q.Left
End Sub
In diesem Beispiel kann p
nur die Mitglieder der Object -Klasse selbst verwenden, die nicht die Left
-Eigenschaft enthalten. Auf der anderen Seite wurde q
als Typ Labeldeklariert, sodass es alle Methoden und Eigenschaften der Label -Klasse im System.Windows.Forms -Namespace verwenden kann.
Flexibilität von Objektvariablen
Beim Arbeiten mit Objekten in einer Vererbungshierarchie können Sie auswählen, welche Klasse zum Deklarieren der Objektvariablen verwendet werden soll. Bei dieser Entscheidung müssen Sie die Flexibilität der Objektzuweisung gegen den Zugriff auf die Member einer Klasse abwägen. Betrachten Sie beispielsweise die Vererbungshierarchie, die zur System.Windows.Forms.Form-Klasse führt:
Angenommen, Ihre Anwendung definiert eine Formularklasse namens specialForm
, die von der Klasse Form erbt. Sie können eine Objektvariable deklarieren, die speziell auf specialForm
verweist, wie das folgende Beispiel zeigt.
Public Class specialForm
Inherits System.Windows.Forms.Form
' Insert code defining methods and properties of specialForm.
End Class
Dim nextForm As New specialForm
Die Deklaration im vorherigen Beispiel beschränkt die Variable nextForm
auf Objekte der Klasse specialForm
, macht aber auch alle Methoden und Eigenschaften von specialForm
für nextForm
verfügbar, sowie alle Member aller Klassen, von denen specialForm
erbt.
Sie können eine Objektvariable allgemeiner gestalten, indem Sie sie als vom Typ Form deklarieren, wie im folgenden Beispiel gezeigt.
Dim anyForm As System.Windows.Forms.Form
Mit der Deklaration im vorherigen Beispiel können Sie jedes beliebige Formular in Ihrer Anwendung anyForm
zuweisen. Obwohl anyForm
auf alle Member der Klasse Form zugreifen kann, kann es keine der zusätzlichen Methoden oder Eigenschaften verwenden, die für bestimmte Formulare wie specialForm
definiert sind.
Alle Member einer Basisklasse sind für abgeleitete Klassen verfügbar, aber die zusätzlichen Member einer abgeleiteten Klasse sind für die Basisklasse nicht verfügbar.
Siehe auch
- Objektvariablen
- Zuweisung von Objektvariablen
- Werte von Objektvariablen
- Gewusst wie: Deklarieren einer Objektvariablen und Zuweisen eines entsprechenden Objekts in Visual Basic
- Vorgehensweise: Zugreifen auf Member eines Objekts
- New Operator (Neuer Benutzer)
- Option Strict-Anweisung
- Lokaler Typrückschluss