Deklaration von Objektvariablen
Aktualisiert: November 2007
Normale Deklarationsanweisungen werden zum Deklarieren von Objektvariablen verwendet. Als Datentyp, aus der das Objekt erstellt werden soll, geben Sie entweder Object (d. h. Object-Datentyp) an oder eine spezifischere Klasse.
Die Deklaration einer Variablen als Object erfolgt wie deren Deklaration als System.Object.
Eine mit einer speziellen Objektklasse deklarierte Variable kann auf alle Methoden und Eigenschaften zugreifen, die diese Klasse zur Verfügung stellt, sowie auf die Klassen, 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 legen Option Strict Off fest, um eine späte Bindung zuzulassen.
Deklarationssyntax
Deklarieren Sie eine Objektvariable mithilfe der folgenden Syntax:
Dim variablename As [New] { objectclass | Object }
Sie können auch Public (Visual Basic), Protected (Visual Basic), Friend (Visual Basic), Protected Friend, Private (Visual Basic), Shared (Visual Basic) oder Static (Visual Basic) in der Deklaration angeben. Folgende 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 vor der Ausführung des Codes unbekannt. In diesem Fall muss die Objektvariable mit dem Datentyp Object deklariert werden. Dadurch wird ein allgemeiner Verweis auf ein Objekt beliebigen Typs erstellt, und die spezifische Klasse wird während der Laufzeit zugewiesen. Dies wird als späte Bindung bezeichnet. Die späte Bindung erfordert zusätzliche Ausführungszeit. Außerdem wird der Code auf die Methoden und Eigenschaften der Klasse beschränkt, die Sie zuletzt zugewiesen haben. Wenn der Code auf Member einer anderen Klasse zuzugreifen versucht, kann es dadurch zu Laufzeitfehlern kommen.
Wenn die spezielle Klasse zur Kompilierungszeit bekannt ist, sollten Sie die Objektvariable immer in dieser Klasse deklarieren. Dies wird als frühe Bindung bezeichnet. Die frühe Bindung erhöht die Leistung und garantiert, dass der Code auf alle Methoden und Eigenschaften der speziellen Klasse zugreifen kann. Wenn die Variable objA aus den vorhergehenden Beispieldeklarationen nur Objekte der Klasse System.Windows.Forms.Label verwendet, müssen Sie As System.Windows.Forms.Label in ihrer Deklaration angeben.
Vorteile der frühen Bindung
Die Deklaration einer Objektvariablen als spezielle Klasse hat mehrere Vorteile:
Automatische Typüberprüfung
Garantierter Zugriff auf alle Member der speziellen Klasse
Microsoft IntelliSense-Unterstützung im Code-Editor
Bessere Lesbarkeit des Codes
Weniger Fehler im Code
Fehler werden zur Kompilierungszeit und nicht erst zur Laufzeit abgefangen
Schnellere Codeausführung
Zugriff auf Member von Objektvariablen
Wenn Option Strict auf On festgelegt ist, kann eine Objektvariable nur auf die Methoden und Eigenschaften der Klasse zugreifen, mit der sie deklariert wurde. 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 Member der Object-Klasse verwenden, zu denen die Left-Eigenschaft nicht gehört. Andererseits wurde q als Label-Typ deklariert, 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 die Klasse wählen, in der die Objektvariablen deklariert werden. Wägen Sie dabei die Flexibilität der Objektzuweisung gegen den Zugriff auf die Member einer Klasse ab. Beachten Sie z. B. die Vererbungshierarchie, die zur System.Windows.Forms.Form-Klasse führt:
Angenommen, die Anwendung definiert die Formularklasse specialForm, die von der Form-Klasse erbt. Sie können dazu – wie im folgenden Beispiel gezeigt – eine Objektvariable deklarieren, die speziell auf specialForm verweist:
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 aus dem vorhergehenden Beispiel begrenzt die Variable nextForm auf Objekte der Klasse specialForm und macht zudem die Methoden und Eigenschaften von specialForm sowie die Member aller Klassen, von denen specialForm erbt, für nextForm verfügbar.
Wie im folgenden Beispiel gezeigt, wird eine Objektvariable allgemeiner gehalten, wenn Sie sie als Variable des Typs Form deklarieren:
Dim anyForm As System.Windows.Forms.Form
Die Deklaration aus dem vorhergehenden Beispiel ermöglicht es, anyForm einem beliebigen Formular Ihrer Anwendung zuzuweisen. 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 (z. B. specialForm) definiert wurden.
Alle Member einer Basisklasse stehen abgeleiteten Klassen zur Verfügung, die zusätzlichen Member einer abgeleiteten Klasse sind für die Basisklasse jedoch nicht verfügbar.
Siehe auch
Aufgaben
Gewusst wie: Deklarieren einer Objektvariable für die Zuweisung eines Objekts in Visual Basic
Gewusst wie: Zugreifen auf Member eines Objekts
Konzepte
Objektvariablen in Visual Basic
Typenloses Programmieren in Visual Basic