Freigeben über


Objektvariablendeklaration (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 ist dasselbe wie das Deklarieren 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 für die späte Bindung.

Deklarationssyntax

Verwenden Sie die folgende Syntax, um eine Objektvariable zu deklarieren:

Dim variablename As [New] { objectclass | Object }  

Sie können in der Deklaration auch "Öffentlich", " Geschützt", " Freund", Protected Friend" Privat", "Freigegeben" oder "Statisch " 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 Object Datentyp 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. Verspätete 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 deklarieren. Dies wird als frühe Bindung bezeichnet. Frühe Bindung verbessert die Leistung und garantiert den Codezugriff auf alle Methoden und Eigenschaften der spezifischen Klasse. Wenn in den vorherigen Beispieldeklarationen die Variable objA nur Objekte der Klasse System.Windows.Forms.Label verwendet, sollten Sie As System.Windows.Forms.Label in ihrer Deklaration angeben.

Vorteile einer frühen Bindung

Durch das Deklarieren einer Objektvariablen als bestimmte Klasse haben Sie mehrere Vorteile:

  • Automatische Typüberprüfung

  • Garantierter Zugriff auf alle Mitglieder der bestimmten Klasse

  • Microsoft IntelliSense-Unterstützung im Code-Editor

  • Verbesserte Lesbarkeit des Codes

  • Weniger Fehler in Ihrem Code

  • Fehler, die zur Kompilierungszeit und nicht zur Laufzeit erfasst wurden

  • Schnellere Codeausführung

Zugriff auf Mitglieder der Objektvariablen

Wenn Option Strict umgestellt On ist, kann eine Objektvariable nur auf die Methoden und Eigenschaften der Klasse zugreifen, mit der Sie sie deklarieren. Im folgenden Beispiel wird dies 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. Andererseits wurde q als Typ Label 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 auswählen, welche Klasse zum Deklarieren der Objektvariablen verwendet werden soll. Bei dieser Auswahl müssen Sie die Flexibilität der Objektzuweisung mit dem Zugriff auf Elemente einer Klasse in Einklang bringen. Betrachten Sie beispielsweise die Vererbungshierarchie, die zu der 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 Formerbt. Sie können eine Objektvariable deklarieren, die sich speziell auf specialForm bezieht, 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 Mitglieder aller Klassen, von denen specialForm erbt.

Sie können eine Objektvariable allgemeiner machen, indem Sie sie als Typ Formdeklarieren, wie im folgenden Beispiel gezeigt.

Dim anyForm As System.Windows.Forms.Form  

Mit der Deklaration im vorherigen Beispiel können Sie einem beliebigen Formular in Ihrer Anwendung anyFormzuweisen. 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