Rozwiązywanie problemów związanych ze zmiennymi w Visual Basic
Na tej stronie wymieniono niektóre typowe problemy, które mogą wystąpić podczas pracy ze zmiennymi w Visual Basic.
Nie można uzyskać dostępu do elementów członkowskich obiektu
Jeśli kod próbuje uzyskać dostęp do właściwości lub metody w obiekcie, istnieją dwa możliwe wyniki błędu:
Kompilator może wygenerować komunikat o błędzie, jeśli zadeklarujesz zmienną obiektu jako określony typ, a następnie odwołasz się do elementu członkowskiego, który nie jest zdefiniowany przez ten typ.
Czas wykonywania MemberAccessException występuje, gdy obiekt przypisany do zmiennej obiektu nie uwidacznia elementu członkowskiego, do którego próbuje uzyskać dostęp kod. W przypadku zmiennej typu danych obiektu można również uzyskać ten wyjątek, jeśli element członkowski nie
Public
jest . Wynika to z tego, że późne powiązanie zezwala na dostęp tylko doPublic
elementów członkowskich.
Gdy instrukcja Option Strict ustawia sprawdzanie On
typu , zmienna obiektu może uzyskiwać dostęp tylko do metod i właściwości klasy, za pomocą której ją deklarujesz. Ilustruje to poniższy przykład.
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
W tym przykładzie p
można używać tylko składowych Object samej klasy, które nie zawierają Left
właściwości . Z drugiej strony q
został zadeklarowany jako typ Label, więc może używać wszystkich metod i właściwości Label klasy w System.Windows.Forms przestrzeni nazw.
Poprawne podejście
Aby mieć dostęp do wszystkich elementów członkowskich obiektu określonej klasy, należy zadeklarować zmienną obiektu jako typ tej klasy, jeśli jest to możliwe. Jeśli nie możesz tego zrobić, na przykład jeśli nie znasz typu obiektu w czasie kompilacji, musisz ustawić Option Strict
wartość i zadeklarować Off
zmienną jako typ danych obiektu. Umożliwia to przypisanie obiektów dowolnego typu do zmiennej i należy wykonać kroki, aby upewnić się, że aktualnie przypisany obiekt jest akceptowalnym typem. Aby to określić, możesz użyć operatora TypeOf .
Inne składniki nie mogą uzyskać dostępu do zmiennej
W nazwach języka Visual Basic nie jest uwzględniana wielkość liter. Jeśli dwie nazwy różnią się tylko wielkością liter alfabetyczną, kompilator interpretuje je jako taką samą nazwę. Na przykład rozważa ABC
i abc
odwołuje się do tego samego zadeklarowanego elementu.
Jednak środowisko uruchomieniowe języka wspólnego (CLR) używa powiązania z uwzględnieniem wielkości liter . W związku z tym podczas tworzenia zestawu lub biblioteki DLL i udostępniania go innym zestawom nazwy nie są już bez uwzględniania wielkości liter. Jeśli na przykład zdefiniujesz klasę z elementem o nazwie ABC
, a inne zestawy używają klasy za pośrednictwem środowiska uruchomieniowego języka wspólnego, muszą one odwoływać się do elementu jako ABC
. Jeśli następnie ponownie skompilujesz klasę i zmienisz nazwę elementu na abc
, inne zestawy używające klasy nie będą już mogły uzyskać dostępu do tego elementu. W związku z tym po wydaniu zaktualizowanej wersji zestawu nie należy zmieniać wielkości liter wszystkich elementów publicznych.
Aby uzyskać więcej informacji, zobacz Środowisko uruchomieniowe języka wspólnego.
Poprawne podejście
Aby zezwolić innym składnikom na dostęp do zmiennych, należy traktować ich nazwy tak, jakby uwzględniały wielkość liter. Podczas testowania klasy lub modułu upewnij się, że inne zestawy są wiążące ze zmiennymi, których oczekujesz. Po opublikowaniu składnika nie wprowadzaj żadnych modyfikacji istniejących nazw zmiennych, w tym zmieniania ich przypadków.
Używana nieprawidłowa zmienna
Jeśli masz więcej niż jedną zmienną o tej samej nazwie, kompilator języka Visual Basic próbuje rozpoznać każde odwołanie do tej nazwy. Jeśli zmienne mają inny zakres, kompilator rozpozna odwołanie do deklaracji z najwęższym zakresem. Jeśli mają ten sam zakres, rozwiązanie zakończy się niepowodzeniem, a kompilator sygnalizuje błąd. Aby uzyskać więcej informacji, zobacz Odwołania do zadeklarowanych elementów.
Poprawne podejście
Unikaj używania zmiennych o tej samej nazwie, ale w innym zakresie. Jeśli używasz innych zestawów lub projektów, należy unikać używania nazw zdefiniowanych w tych składnikach zewnętrznych, jak najwięcej. Jeśli masz więcej niż jedną zmienną o tej samej nazwie, upewnij się, że kwalifikujesz się do niej każde odwołanie. Aby uzyskać więcej informacji, zobacz Odwołania do zadeklarowanych elementów.