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


Процедуры свойств (Visual Basic)

Процедура свойства — это ряд инструкций Visual Basic, которые управляют пользовательским свойством в модуле, классе или структуре. Процедуры свойств также называются средствами доступа к свойствам.

Visual Basic предоставляет следующие процедуры свойств:

  • Процедура Get возвращает значение свойства. Он вызывается при доступе к свойству в выражении.
  • Процедура Set задает свойству значение, включая ссылку на объект. Он вызывается при назначении значения свойству.

Обычно вы определяете процедуры свойств в парах, используя операторы Get и Set, но можно определить любую процедуру отдельно, если свойство доступно только для чтения (Оператор Get) или только для записи (Оператор Set).

При использовании автоматически реализуемого свойства можно опустить процедуры Get и Set. Дополнительные сведения см. в разделе "Автоматически реализованные свойства".

Можно определить свойства в классах, структурах и модулях. Свойства по умолчанию Public, что означает, что вы можете вызывать их из любого места в приложении, которое может получить доступ к контейнеру свойства.

Сравнение свойств и переменных см. в разделе "Различия между свойствами и переменными" в Visual Basic.

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

Свойство определяется блоком кода, заключённым в оператор Property и End Property оператор. В этом блоке каждая процедура свойств отображается как внутренний блок, заключенный внутри оператора объявления (Get или Set) и соответствующего оператора объявления End.

Синтаксис объявления свойства и его процедур выглядит следующим образом:

[Default] [Modifiers] Property PropertyName[(ParameterList)] [As DataType]
    [AccessLevel] Get
        ' Statements of the Get procedure.
        ' The following statement returns an expression as the property's value.
        Return Expression
    End Get
    [AccessLevel] Set[(ByVal NewValue As DataType)]
        ' Statements of the Set procedure.
        ' The following statement assigns newvalue as the property's value.
        LValue = NewValue
    End Set
End Property
' - or -
[Default] [Modifiers] Property PropertyName [(ParameterList)] [As DataType]

Можно указать Modifiers уровень доступа и информацию о перегрузке, переопределении, совместном использовании и скрытии, а также о том, доступно ли свойство только для чтения или только для записи. AccessLevel Уровень в Get или Set процедуре может быть любым, который является более строгим, чем уровень доступа, указанный для самого свойства. Дополнительные сведения см. в разделе Описание свойства.

Тип данных

Тип данных свойства и основной уровень доступа определяются в Property операторе, а не в процедурах свойств. Свойство может иметь только один тип данных. Например, нельзя определить свойство для хранения значения Decimal, а получать значение Double.

Уровень доступа

Однако можно определить основной уровень доступа для свойства и дополнительно ограничить уровень доступа в одной из процедур для этого свойства. Например, можно определить Public свойство, а затем определить процедуру Private Set . Процедура Get остается Public. Уровень доступа можно изменить только в одной из процедур свойства, и вы можете сделать его более строгим, чем основной уровень доступа. Дополнительные сведения см. в разделе "Практическое руководство. Объявление свойства с смешанными уровнями доступа".

Объявление параметров

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

Синтаксис для каждого параметра в списке параметров выглядит следующим образом:

[Optional] ByVal [ParamArray] parametername As datatype

Если параметр является необязательным, необходимо также указать значение по умолчанию в рамках его объявления. Синтаксис для указания значения по умолчанию выглядит следующим образом:

Optional ByVal parametername As datatype = defaultvalue

Значение свойства

В процедуре Get возвращаемое значение предоставляется вызывающему выражению в качестве значения свойства.

В процедуре Set новое значение свойства передается параметру Set инструкции. При явном объявлении параметра необходимо объявить его с тем же типом данных, что и свойство. Если параметр не объявлен, компилятор использует неявный параметр Value для представления нового значения, которое будет назначено свойству.

Синтаксис вызова

Процедура свойства вызывается неявно путем ссылки на свойство. Имя свойства используется так же, как и имя переменной, за исключением того, что необходимо указать значения для всех аргументов, которые не являются необязательными, и необходимо заключить список аргументов в скобки. Если аргументы не указаны, можно также опустить круглые скобки.

Синтаксис неявного вызова Set процедуры выглядит следующим образом:

propertyname[(argumentlist)] = expression

Синтаксис неявного вызова Get процедуры выглядит следующим образом:

lvalue = propertyname[(argumentlist)]
Do While (propertyname[(argumentlist)] > expression)

Иллюстрация объявления и вызова

Следующее свойство сохраняет полное имя как два составных компонента: имя и фамилию. При чтении fullName вызывающий код использует процедуру Get, которая объединяет два составляющих имени и возвращает полное имя. Когда вызывающий код назначает новое полное имя, Set процедура пытается разбить ее на два составных имени. Если он не находит пробел, он сохраняет все это как первое имя.

Dim firstName, lastName As String
Property fullName() As String
    Get
      If lastName = "" Then
          Return firstName
      Else
          Return firstName & " " & lastName
      End If

    End Get
    Set(ByVal Value As String)
        Dim space As Integer = Value.IndexOf(" ")
        If space < 0 Then
            firstName = Value
            lastName = ""
        Else
            firstName = Value.Substring(0, space)
            lastName = Value.Substring(space + 1)
        End If
    End Set
End Property

В следующем примере показаны типичные вызовы процедур свойств fullName:

fullName = "MyFirstName MyLastName"
MsgBox(fullName)

См. также