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


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

Для объявления переменной объекта используется обычная инструкция объявления. Для типа данных укажите 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 :

Object

  MarshalByRefObject

    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.

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

См. также