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

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

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

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

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

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

Можно определить свойства в классах, структурах и модулях. Свойства по 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 указать уровень доступа и информацию о перегрузке, переопределении, совместном использовании и тени, а также о том, доступно ли свойство только для чтения или записи. Get На AccessLevel уровне или Set процедуре может быть любой уровень, который является более строгим, чем уровень доступа, указанный для самого свойства. Дополнительные сведения см. в инструкции property.

Тип данных

Тип данных свойства и уровень доступа субъекта определяются в 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)

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

Следующее свойство сохраняет полное имя в виде двух составных имен, имени и фамилии. При чтении fullNameGet вызывающего кода процедура объединяет два составляющих имена и возвращает полное имя. Когда вызывающий код назначает новое полное имя, 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)

См. также