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 StrictOn 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:

Object

  MarshalByRefObject

    Component

      Control

        ScrollableControl

          ContainerControl

            Form

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