Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Для объявления переменной объекта используется обычная инструкция объявления. Для типа данных укажите Object
(то есть тип данных объекта) или более конкретный класс, из которого создается объект.
Объявление переменной как Object
то же, что объявление её как System.Object.
При объявлении переменной с определенным классом объектов он может получить доступ ко всем методам и свойствам, предоставляемым этим классом, и классам, от которых он наследует. Если вы объявляете переменную с помощью Object, она может получить доступ только к членам класса Object, если вы не включите Option Strict Off
для разрешения поздней привязки.
Синтаксис объявления
Используйте следующий синтаксис для объявления переменной объекта:
Dim variablename As [New] { objectclass | Object }
Вы также можете указать public, protected, Friend, 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
.
Все члены базового класса доступны производным классам, но дополнительные члены производного класса недоступны для базового класса.