Поделиться через


Устранение неполадок, связанных с переменными, в Visual Basic

Обновлен: Ноябрь 2007

На этой странице перечислены некоторые общие проблемы, которые могут возникнуть при работе с переменными в Visual Basic.

Не удалось получить доступ к членам объекта

Когда код пытается обратиться к свойству или методу объекта, возможны две ошибки:

  • Компилятор может выдать сообщение об ошибке, если вы объявите переменную объекта определенного типа, а затем ссылаетесь на член, не определенный этим типом.

  • Время выполнения MemberAccessException возникает, когда объект, присвоенный переменной объекта, не предоставляет элемент, к которому ваш код пытается получить доступ. При переменной Тип данных Object можно также получить это исключение, если элемент не является Public. Это происходит потому, что позднее связывание разрешает доступ только к членам Public.

Если Оператор Option Strict включает проверку типа On, для переменной объекта доступны методы и свойства только того класса, в котором она объявлена. Это показано в приведенном ниже примере.

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

В этом примере переменная p может использовать только члены самого класса Object, который не включает свойство Left. С другой стороны, q была объявлена с типом Label и, следовательно, может использовать все методы и свойства класса Label в пространстве имен System.Windows.Forms.

Правильный подход

Чтобы получить возможность доступа ко всем членам объекта, определенного класса, по возможности объявите переменную объекта с типом этого класса. Если Вы не можете сделать это; например, если вы не знаете тип объекта во время компиляции, необходимо задать Option Strict равным Off и объявить переменную типа Тип данных Object. Это позволяет присваивать переменной объекты любого типа, и необходимо убедиться, что текущий назначенный объект имеет допустимый тип. Можно использовать Оператор TypeOf (Visual Basic) для этого определения.

Другие компоненты не могут получить доступ к вашим переменным

Имена в Visual Basicбез учета регистра. Если два имени отличаются только регистром букв, компилятор интерпретирует их как одно и то же имя. Например, имена ABC и abc воспринимаются как ссылка на один и тот же объявленный элемент.

Однако общеязыковя среда выполнения (среда CLR) использует чувствительное к регистру связывание. Поэтому при создании сборки или библиотеки DLL и предоставлении доступа к ней другим сборкам необходимо учитывать регистр в используемых именах. Например, если в некоторых сборках используется класс, содержащий элемент с именем ABC, через общеязыковую среду выполнения, необходимо указывать в ссылке имя элемента ABC. Если впоследствии этот класс заново компилируется с именем элемента, измененным на abc, другие сборки, использующие его, не смогут обращаться к этому элементу. Поэтому при выпуске обновленной версии сборки не следует изменять регистр буквенных символов в именах открытых элементов.

Дополнительные сведения см. в разделе Среда CLR.

Правильный подход

Чтобы разрешить другим компонентам доступ к переменным, измените их имена, как если бы они учитывали регистр. При тестировании класса или модуля, убедитесь, что другие сборки выполняют привязку к тем переменным, к которым вы планируете. После публикации компонента не делайте никаких изменений в существующих переменных, включая изменение регистра в их именах.

Используется неправильная переменная

Если имеется более одной переменной с тем же именем, компилятор Visual Basic пытается разрешить каждую ссылку на это имя. Если переменные имеют различные области, компилятор разрешает ссылку на объявление с самой узкой областью. Если они имеют одну и ту же область, разрешение завершается ошибкой, и компилятор сигнализирует об ошибке. Дополнительные сведения см. в разделе Разрешение ссылки, когда несколько переменных имеют одинаковые имена.

Правильный подход

Избегайте использования переменных с одинаковыми именами, но с разными областями. При использовании других сборок или проектов, избегайте по возможности использования любых имен, определенных в их внешних компонентах. Если имеется более одной переменной с тем же именем, необходимо уточнить каждую ссылку на него. Дополнительные сведения см. в разделе Практическое руководство. Различение двух элементов с одинаковыми именами.

См. также

Задачи

Практическое руководство. Доступ к членам объекта

Практическое руководство. Определение типа, на который указывает объектная переменная

Основные понятия

Переменные в Visual Basic

Объявление переменной в Visual Basic

Объектные переменные в Visual Basic

Объявление переменных объектов

Значения объектных переменных

Разрешение ссылки, когда несколько переменных имеют одинаковые имена

Имена объявленных элементов