Freigeben über


Problembehandlung bei Variablen in Visual Basic

Auf dieser Seite werden einige allgemeine Probleme aufgelistet, die bei der Arbeit mit Variablen in Visual Basic auftreten können.

Zugriff auf Member eines Objekts ist nicht möglich

Wenn Ihr Code versucht, auf eine Eigenschaft oder Methode eines Objekts zuzugreifen, können zwei Arten von Fehlern auftreten:

  • Der Compiler kann eine Fehlermeldung generieren, wenn Sie die Objektvariable als bestimmten Typ deklarieren und dann auf einen Member verweisen, der nicht durch diesen Typ definiert ist.

  • Eine Laufzeit- MemberAccessException tritt auf, wenn das einer Objektvariablen zugewiesene Objekt nicht den Member verfügbar macht, auf den Ihr Code zugreifen möchten. Bei einer Variablen von Object Data Typekönnen Sie diese Ausnahmemeldung auch erhalten, wenn der Member nicht Publicauftreten können. Der Grund ist, dass die späte Bindung nur den Zugriff auf Public -Member erlaubt.

Wenn Option Strict Statement für die Typüberprüfung Onfestlegt, kann eine Objektvariable nur auf die Methoden und Eigenschaften der Klasse zugreifen, mit der Sie sie deklarieren. Dies wird anhand des folgenden Beispiels veranschaulicht.

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 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.

Richtige Vorgehensweise

Um auf alle Member eines Objekts einer bestimmten Klasse zugreifen zu können, deklarieren Sie die Objektvariable nach Möglichkeit als Typ der Klasse. Wenn das nicht möglich ist, z. B. weil Sie den Objekttyp zur Kompilierzeit nicht kennen, müssen Sie Option Strict auf Off festlegen und die Variable als Objektdatentyp deklarieren. So können der Variablen Objekte beliebigen Typs zugewiesen werden, und Sie sollten Maßnahmen ergreifen, um sicherzustellen, dass das aktuell zugewiesene Objekt einen zulässigen Typ hat. Sie können den TypeOf-Operator verwenden, um diese Bestimmung vorzunehmen.

Andere Komponenten können nicht auf die Variable zugreifen

Bei Visual Basic-Namen wird die Groß-/Kleinschreibung nicht beachtet. Wenn zwei Namen sich nur in der Groß- und Kleinschreibung unterscheiden, interpretiert der Compiler sie als identisch. Er geht z. B. davon aus, dass ABC und abc auf das gleiche deklarierte Element verweisen.

Allerdings verwendet die Common Language Runtime (CLR) die Groß-/Kleinschreibung unterscheidende Bindung. Wenn Sie also eine Assembly oder DLL erstellen und für andere Assemblys verfügbar machen, wird bei Ihren Namen Groß-und Kleinschreibung unterschieden. Wenn Sie z. B. eine Klasse mit einem Element namens ABCdefinieren, müssen andere Assemblys, die die Klasse über die Common Language Runtime verwenden, auf das Element als ABCverweisen. Wenn Sie danach die Klasse erneut kompilieren und den Namen des Elements in abcändern, können andere Assemblys, die Ihre Klasse verwenden, nicht mehr auf dieses Element zugreifen. Wenn Sie also eine aktualisierte Version einer Assembly herausgeben, sollten Sie die Groß-/Kleinschreibung öffentlicher Elemente nicht ändern.

Weitere Informationen finden Sie unter Common Language Runtime.

Richtige Vorgehensweise

Um anderen Komponenten den Zugriff auf Ihre Variablen zu ermöglichen, behandeln Sie deren Namen so, als würde die Groß-/Kleinschreibung unterschieden. Stellen Sie beim Testen der Klasse oder des Moduls sicher, dass andere Assemblys sich gemäß Ihrer Erwartung an die Variablen binden. Nachdem Sie eine Komponente veröffentlicht haben, nehmen Sie keine Änderungen an vorhandenen Namen von Variablen vor, Ändern von Groß-/Kleinschreibung inbegriffen.

Falsche Variable wird verwendet

Wenn Sie über mehrere Variablen gleichen Namens verfügen, 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 Deklaration mit dem engsten Gültigkeitsbereich auf. Wenn sie den gleichen Gültigkeitsbereich aufweisen, gelingt die Auflösung nicht, und der Compiler signalisiert einen Fehler. Weitere Informationen finden Sie unter References to Declared Elements.

Richtige Vorgehensweise

Vermeiden Sie, Variablen mit gleichem Namen, aber unterschiedlichen Gültigkeitsbereichen zu verwenden. Wenn Sie andere Assemblys oder Projekte verwenden, vermeiden Sie so weit wie möglich die Verwendung von Namen, die in diesen externen Komponenten definiert werden. Wenn Sie über mehrere Variablen gleichen Namens verfügen, achten Sie darauf, jeden Verweis auf sie zu qualifizieren. Weitere Informationen finden Sie unter References to Declared Elements.

Siehe auch