Deklaration von Objektvariablen (Visual Basic)

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.

cfwx51t1.collapse_all(de-de,VS.110).gifVorteile 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:

Object

    Component

      Control

        ScrollableControl

          ContainerControl

            Form

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 Objektvariablen und Zuweisen eines entsprechenden Objekts in Visual Basic

Gewusst wie: Zugreifen auf Member eines Objekts (Visual Basic)

Referenz

Operator New (Visual Basic)

Option Strict-Anweisung

Konzepte

Objektvariablen in Visual Basic

Zuweisen von Objektvariablen (Visual Basic)

Werte von Objektvariablen (Visual Basic)

Lokaler Typrückschluss (Visual Basic)