Problembehandlung bei Variablen in Visual Basic
Aktualisiert: November 2007
Auf dieser Seite sind einige allgemeine Probleme aufgeführt, die beim Arbeiten mit Variablen in Visual Basic auftreten können.
Auf Member eines Objekts kann nicht zugegriffen werden
Wenn Code auf eine Eigenschaft oder Methode für ein Objekt zuzugreifen versucht, können zwei Arten von Fehlern auftreten:
Der Compiler kann eine Fehlermeldung generieren, wenn Sie für die Objektvariable einen bestimmten Typ deklarieren und anschließend auf einen Member verweisen, der nicht durch diesen Typ definiert ist.
Eine MemberAccessException tritt zur Laufzeit auf, wenn das einer Objektvariablen zugewiesene Objekt nicht den Member verfügbar macht, auf den der Code zuzugreifen versucht. Bei einer Variablen vom Object-Datentyp kann diese Ausnahme auch auftreten, wenn der Member nicht Public ist. Der Grund hierfür ist, dass bei später Bindung nur ein Zugriff auf Public-Member zulässig ist.
Wenn die Option Strict-Anweisung die Typüberprüfung auf On festlegt, 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 Strict On
Dim p As Object = New System.Windows.Forms.Label
Dim q As System.Windows.Forms.Label = 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
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.
Richtige Vorgehensweise
Um auf alle Member eines Objekts einer bestimmten Klasse zugreifen zu können, deklarieren Sie die Objektvariable nach Möglichkeit als Typ dieser Klasse. Wenn dies nicht möglich ist, da Sie beispielsweise den Objekttyp zur Kompilierzeit nicht kennen, müssen Sie Option Strict auf Off festlegen und die Variable als Object-Datentyp deklarieren. Dies ermöglicht das Zuweisen von Objekten jeden Typs zur Variablen, und Sie sollten sicherstellen, dass das gegenwärtig zugewiesene Objekt einen zulässigen Typ aufweist. Um dies zu bestimmen, können Sie den TypeOf-Operator (Visual Basic) verwenden.
Andere Komponenten können nicht auf die Variable zugreifen
Bei Visual Basic-Namen wird die Groß-/Kleinschreibung nicht berücksichtigt. Wenn zwei Namen sich nur in der Groß-/Kleinschreibung unterscheiden, interpretiert sie der Compiler als gleicher Name. ABC und abc werden beispielsweise als Verweis auf dasselbe deklarierte Element angesehen.
Die Common Language Runtime (CLR) verwendet jedoch eine Bindung, bei der zwischen Groß-/Kleinschreibung unterschieden wird. Wenn Sie eine Assembly oder eine DLL erstellen und diese für andere Assemblys verfügbar machen, wird bei den Namen daher zwischen Groß-/Kleinschreibung unterschieden. Wenn Sie beispielsweise eine Klasse mit einem Element ABC definieren und andere Assemblys mithilfe der Common Language Runtime auf diese Klasse zugreifen, müssen Sie auf dieses Element verweisen, indem der Name ABC verwendet wird. Wenn Sie danach die Klasse erneut kompilieren und den Namen des Elements in abc ändern, können die anderen Assemblys, die die Klasse verwenden, nicht mehr auf dieses Element zugreifen. Daher sollten Sie beim Fertigstellen einer aktualisierten Version einer Assembly nicht die Groß- und Kleinschreibung von public-Elementen verändern.
Weitere Informationen finden Sie unter Common Language Runtime.
Richtige Vorgehensweise
Um den Zugriff anderer Komponenten auf die Variablen zuzulassen, beachten Sie bei ihren Namen die Groß-/Kleinschreibung. Stellen Sie beim Testen der Klasse oder des Moduls sicher, dass andere Assemblys an die Variablen gebunden werden, an die sie gebunden werden sollen. Nachdem Sie eine Komponente veröffentlicht haben, ändern Sie keine vorhandenen Namen von Variablen, auch nicht ihre Groß-/Kleinschreibung.
Es wird eine falsche Variable verwendet
Wenn mehrere Variablen mit demselben Namen vorhanden sind, versucht der Visual Basic-Compiler, jeden Verweis auf diesen Namen aufzulösen. Wenn die Variablen über unterschiedliche Gültigkeitsbereiche verfügen, löst der Compiler einen Verweis auf die Variable mit dem engsten Gültigkeitsbereich auf. Wenn sie denselben Gültigkeitsbereich aufweisen, schlägt die Auflösung fehl, und der Compiler signalisiert einen Fehler. Weitere Informationen finden Sie unter Auflösen eines Verweises bei mehreren Variablen mit gleichem Namen.
Richtige Vorgehensweise
Verwenden Sie keine Variablen mit gleichem Namen und unterschiedlichem Gültigkeitsbereich. Wenn Sie andere Assemblys oder Projekte verwenden, vermeiden Sie nach Möglichkeit die Verwendung von Namen, die in diesen externen Komponenten definiert sind. Wenn mehrere Variablen mit demselben Namen vorhanden Sie, qualifizieren Sie jeden Verweis auf den Namen. Weitere Informationen finden Sie unter Gewusst wie: Unterscheiden zwischen zwei Elementen mit dem gleichen Namen.
Siehe auch
Aufgaben
Gewusst wie: Zugreifen auf Member eines Objekts
Gewusst wie: Bestimmen des Typs, auf den eine Objektvariable verweist
Konzepte
Variablendeklaration in Visual Basic
Objektvariablen in Visual Basic
Deklaration von Objektvariablen
Auflösen eines Verweises bei mehreren Variablen mit gleichem Namen