Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
На этой странице перечислены некоторые распространенные проблемы, которые могут возникнуть при работе с переменными в Visual Basic.
Не удается получить доступ к членам объекта
Если ваш код пытается получить доступ к свойству или методу объекта, могут возникнуть две следующие ошибки.
Компилятор может создать сообщение об ошибке, если вы объявляете переменную объекта с определенным типом и затем ссылаетесь на член, не определенный этим типом.
MemberAccessException времени выполнения возникает, когда объект, присвоенный переменной объекта, не является элементом, доступ к которому пытается получить код. В случае с переменной Object Data Typeэто исключение также возникает, если член не является
Public. Это происходит потому, что позднее связывание разрешает доступ только к членамPublic.
Когда Option Strict Statement задает для проверки типа значение 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 Data Type. В этом случае переменной могут быть присвоены объекты любого типа, а вы должны выполнить действия, чтобы убедиться, что текущий назначенный объект имеет допустимый тип. Для этого можно использовать оператор TypeOf .
Другие компоненты не могут получить доступ к переменной
В именах Visual Basic регистр не учитывается. Если два имени отличаются только регистром букв, компилятор интерпретирует их как одно и то же. Например, он считает, что ABC и abc являются одним и тем же объявленным элементом.
Однако среда CLR использует привязку с учетом регистра . Таким образом, при создании сборки или DLL и предоставлении к ней доступа другим сборкам, в именах регистр учитываться не будет. Например, если определен класс с элементом ABCи другие сборки используют класс с помощью среды CLR, они должны ссылаться на элемент как на ABC. Если впоследствии вы перекомпилируете класс и измените имя элемента на abc, другие сборки, использующие класс, больше не смогут обращаться к этому элементу. Таким образом, при выпуске обновленной версии сборки нельзя изменять регистр имен открытых элементов.
Для получения дополнительной информации см. Common Language Runtime.
Правильный подход
Чтобы другие компоненты получали доступ к переменным, рассматривайте их имена так, как если бы в них учитывался регистр. При тестировании класса или модуля убедитесь, что другие сборки выполняют привязку к нужным переменным. После публикации компонента не изменяйте существующие имена переменных и их регистр.
Используется неправильная переменная
При наличии нескольких переменных с одинаковыми именами компилятор Visual Basic пытается разрешить каждую ссылку на это имя. Если переменные имеют различные области действия, компилятор разрешает ссылку на объявление с самой узкой областью. Если они имеют одну и ту же область действия, разрешение не выполняется и компилятор сообщает об ошибке. Для получения дополнительной информации см. References to Declared Elements.
Правильный подход
Избегайте использования переменных с одинаковыми именами, но разными областями действия. При работе с другими сборками или проектами избегайте использования любых имен, определенных в их внешних компонентах, насколько это возможно. При наличии нескольких переменных с одним и тем же именем необходимо уточнить каждую ссылку на такую переменную. Для получения дополнительной информации см. References to Declared Elements.
См. также раздел
- Переменные
- Объявление переменной
- Объектные переменные
- Объявление объектной переменной
- Практическое руководство. Доступ к членам объекта
- Значения объектных переменных
- Практическое руководство. Определение типа, на который указывает объектная переменная
- References to Declared Elements
- Declared Element Names