Изменения свойств по умолчанию для пользователей Visual Basic 6.0

Обновлен: Ноябрь 2007

Для упрощения и улучшения читаемости кода в Visual Basic 2008 обновлена поддержка свойств по умолчанию.

Visual Basic 6.0

В Visual Basic 6.0 свойства по умолчанию поддерживаются в объектах. В элементе управления Label, например, Caption является свойством по умолчанию, поэтому два присваивания в следующем примере эквивалентны:

Dim lbl As Label 
lbl = "Important" 
lbl.Caption = "Important" 

Свойства по умолчанию дают некоторое преимущество, упрощая написание кода на Visual Basic, однако у них есть ряд недостатков:

  • Они могут сделать код более сложным для чтения. Если элемент управления Label незнаком разработчику, он не сможет в предыдущем примере по первому присваиванию узнать, хранится ли строка "Important" непосредственно в переменной lbl или в свойстве по умолчанию.

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

  • Свойства по умолчанию делают оператор Set необходимым в языке Visual Basic. В следующем примере показано, как указать оператору Set, что требуется присвоить ссылку для объекта, а не свойство по умолчанию:

    Dim lbl1 As Label, lbl2 As Label 
    lbl1 = "Saving" ' Assign a value to lbl1's Caption property. 
    lbl2 = lbl1       ' Replace lbl2's Caption property with lbl1's. 
    Set lbl2 = lbl1   ' Replace lbl2 with an object reference to lbl1. 
    

Visual Basic 2008

В Visual Basic 2008 свойства по умолчанию не поддерживаются, если они не принимают аргументы. Из-за такого изменения в синтаксисе нет необходимости указывать операторам Let и Set, что именно должно быть присвоено, и они в операторах присваивания не используются. Свойством Text замещается свойство Caption в элементе управления Label, и предыдущий пример можно переписать следующим образом:

Dim L1, L2 As New Label   ' Both become type Label
                          ' in the new version of Visual Basic.
L1.Text = "Saving"        ' Assign Text property. 
L2.Text = L1.Text         ' Copy Text property. 
L2 = L1                   ' Copy object reference.

Let остается зарезервированным словом в Visual Basic 2008, хотя и не имеет синтаксического использования. Это позволяет избежать путаницы с его значениями в предыдущих версиях. В Visual Basic 2008 используется оператор Set для процедур свойств, которые задают значение свойства.

Параметризованные свойства

Свойства по умолчанию, принимающие аргументы, не являются неопределенными, и они не поддерживаются в Visual Basic 2008. Свойства по умолчанию появляются наиболее часто в классах коллекций. Например, в пространстве имен System.Windows.Forms класс Form поддерживает следующую иерархию:

Объект Form

   Свойство Controls (возвращает объект Control.ControlCollection для этой формы)

      Объект Control.ControlCollection (свойство по умолчанию — Item)

         Свойство Item (возвращает объект Control для одного элемента коллекции)

            Объект Control

Свойство Controls возвращает объект Control.ControlCollection, а свойство Item возвращает объект Control. В следующем примере показано правильное и неправильное использование свойств по умолчанию в Visual Basic 2008:

Dim F As New Form   ' Assume F has been created and initialized.
F.Controls.Item(0).Text = "Stop"  ' Valid -- no default properties used. 
F.Controls(0).Text = "Stop"  ' Valid -- Item is parameterized. 
'F(0).Text = "Stop"  ' INVALID -- Form does not have a default property. 
'F.Controls(0) = "Stop"  ' INVALID -- No default property on Control. 

Объявление свойств по умолчанию

В Visual Basic 2008 объявите свойство как свойство по умолчанию, указав в начале объявления ключевое слово Default. При перегрузке имени свойства необходимо указать Default в каждом объявлении перегрузки. Свойство по умолчанию не может быть объявлено Shared или Private.

См. также

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

Изменения процедуры свойств для пользователей Visual Basic 6.0

Сводка изменений поддержки элементов программирования

Ссылки

Text

Label

Инструкция Set (Visual Basic)

System.Windows.Forms

Form

Control.ControlCollection

Control

Default (Visual Basic)