Объявление переменных объектов (Visual Basic)
Для объявления переменной объекта используется обычная инструкция объявления. Для типа данных укажите Object
(то есть тип данных объекта) или более конкретный класс, из которого создается объект.
Объявление переменной, как Object
и объявление System.Object.
При объявлении переменной с определенным классом объектов он может получить доступ ко всем методам и свойствам, предоставляемым этим классом, и классам, от которых он наследует. Если вы объявляете переменную с Objectпомощью, она может получить доступ только к членам Object класса, если вы не включите Option Strict Off
позднюю привязку.
Синтаксис объявления
Используйте следующий синтаксис для объявления переменной объекта:
Dim variablename As [New] { objectclass | Object }
Вы также можете указать public, protected, Friend, Private, Protected Friend
Shared или Static в объявлении. Допустимы следующие примеры объявлений:
Private objA As Object
Static objB As System.Windows.Forms.Label
Dim objC As System.OperatingSystem
Поздняя привязка и ранняя привязка
Иногда определенный класс неизвестен до запуска кода. В этом случае необходимо объявить переменную объекта с типом Object
данных. При этом создается общая ссылка на любой тип объекта, а конкретный класс назначается во время выполнения. Это называется поздней привязкой. Для последней привязки требуется дополнительное время выполнения. Он также ограничивает код методами и свойствами класса, которым вы недавно назначили его. Это может привести к ошибкам во время выполнения, если код пытается получить доступ к членам другого класса.
Когда вы знаете конкретный класс во время компиляции, следует объявить переменную объекта для этого класса. Этот принцип называется раннее связывание. Ранняя привязка повышает производительность и гарантирует доступ кода ко всем методам и свойствам конкретного класса. В предыдущих примерах объявлений, если переменная objA
использует только объекты класса System.Windows.Forms.Label, следует указать As System.Windows.Forms.Label
в его объявлении.
Преимущества раннего связывания
Объявление переменной объекта в качестве определенного класса дает несколько преимуществ:
Автоматическое проверка типа
Гарантированный доступ ко всем членам определенного класса
Поддержка Microsoft IntelliSense в редакторе кода
Улучшенная удобочитаемость кода
Меньше ошибок в коде
Ошибки, пойманные во время компиляции, а не во время выполнения
Ускорение выполнения кода
Доступ к элементам переменной объекта
При Option Strict
повороте On
переменная объекта может получить доступ только к методам и свойствам класса, с которым вы объявляете его. Это показано в следующем примере.
' Option statements must precede all other source file lines.
Option Strict On
' Imports statement must precede all declarations in the source file.
Imports System.Windows.Forms
Public Sub accessMembers()
Dim p As Object
Dim q As System.Windows.Forms.Label
p = New System.Windows.Forms.Label
q = 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
End Sub
В этом примере p
может использовать только члены класса Object без свойства Left
. С другой стороны, q
был объявлен с типом Label, поэтому он может использовать все методы и свойства класса Label в пространстве имен System.Windows.Forms .
Гибкость переменных объектов
При работе с объектами в иерархии наследования вы можете выбрать класс, используемый для объявления переменных объекта. При таком выборе необходимо сбалансировать гибкость назначения объектов с доступом к членам класса. Например, рассмотрим иерархию наследования, которая приводит к классу System.Windows.Forms.Form :
Предположим, что приложение определяет класс формы, который specialForm
наследует от класса Form. Можно объявить объектную переменную, которая ссылается специально на specialForm
, как показано в следующем примере.
Public Class specialForm
Inherits System.Windows.Forms.Form
' Insert code defining methods and properties of specialForm.
End Class
Dim nextForm As New specialForm
Объявление в предыдущем примере ограничивает переменную nextForm
объектами класса specialForm
, но также делает все методы и свойства specialForm
доступными nextForm
, а также все члены всех классов, от которых specialForm
наследуется.
Можно сделать переменную объекта более общей, объявив ее типом Form, как показано в следующем примере.
Dim anyForm As System.Windows.Forms.Form
Объявление в предыдущем примере позволяет назначить любую форму в приложении anyForm
. Однако хотя anyForm
доступ ко всем членам класса Formможет быть доступ, он не может использовать какие-либо из дополнительных методов или свойств, определенных для определенных форм, таких как specialForm
.
Все члены базового класса доступны производным классам, но дополнительные члены производного класса недоступны для базового класса.