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


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

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

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

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

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

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

Dim variablename As [New] { objectclass | Object }  

Вы также можете указать public, protected, Friend, Private, Protected FriendShared или 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.

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

См. также