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

Используйте обычный оператор объявления для объявления объектной переменной. Для типа данных укажите Object (то есть Тип данных Object) или более определенный класс, из которого будет создан объект.

Объявление переменной как Object аналогично ее объявлению как System.Object.

При объявлении переменной с указанным объектом класса она получает доступ ко всем методам и свойствам этого класса и классов, от которых он наследуется. Если объявить переменную с классом Object, она получает доступ только к членам класса Object, если не выключить Option Strict Off, чтобы разрешить позднее связывание.

Синтаксис объявления

Используйте следующий синтаксис для объявления объектной переменной:

Dim variablename As [New] { objectclass | Object }

Можно также указать в объявлении Public (Visual Basic), Protected (Visual Basic), Friend (Visual Basic), Protected Friend, Private (Visual Basic), Shared (Visual Basic) или Static (Visual Basic). Допустимы следующие варианты объявлений:

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:

Object

    Component

      Control

        ScrollableControl

          ContainerControl

            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.

Все члены базового класса доступны для производных классов, но дополнительные члены производного класса недоступны для базового класса.

См. также

Задачи

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

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

Ссылки

Оператор New (Visual Basic)

Оператор Option Strict

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

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

Присваивание объектных переменных (Visual Basic)

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

Программирование без типов в Visual Basic

Вывод локального типа (Visual Basic)