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


Автоматически реализованные свойства (Visual Basic)

Автоматически реализованные свойства позволяют быстро указать свойство класса без необходимости писать код Get и Set свойство. При написании кода для автоматически реализованного свойства компилятор Visual Basic автоматически создает частное поле для хранения переменной свойства в дополнение к созданию связанных Get и Set процедур.

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

Public Property Name As String
Public Property Owner As String = "DefaultName"
Public Property Items As New List(Of String) From {"M", "T", "W"}
Public Property ID As New Guid()

Автоматически реализованное свойство эквивалентно свойству, для которого значение свойства хранится в частном поле. В следующем примере кода показано автоматически реализованное свойство.

Property Prop2 As String = "Empty"

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

Private _Prop2 As String = "Empty"
Property Prop2 As String
    Get
        Return _Prop2
    End Get
    Set(ByVal value As String)
        _Prop2 = value
    End Set
End Property

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

Class Customer  
   Public ReadOnly Property Tags As New List(Of String)  
   Public ReadOnly Property Name As String = ""  
   Public ReadOnly Property File As String  
  
   Sub New(file As String)  
      Me.File = file  
   End Sub  
End Class  

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

Резервное поле

При объявлении автоматически реализованного свойства Visual Basic автоматически создает скрытое закрытое поле с именем резервного поля , чтобы содержать значение свойства. Имя резервного поля — это автоматически реализованное имя свойства, предшествующее символу подчеркивания (_). Например, если вы объявляете автоматически реализованное свойство с именем ID, поле резервного копирования называется _ID. Если добавить элемент класса также с именем _ID, возникнет конфликт имен, и Visual Basic сообщает об ошибке компилятора.

Резервное поле также имеет следующие характеристики:

  • модификатор доступа для резервного поля — всегда Private, даже если само свойство имеет другой уровень доступа, например Public;

  • если свойство помечено как Shared, резервное поле также будет общим;

  • атрибуты, указанные для свойства, не применяются к резервному полю;

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

Инициализация автоматически реализованного свойства

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

Property FirstName As String = "James"
Property PartNo As Integer = 44302
Property Orders As New List(Of Order)(500)

Вы не можете инициализировать автоматически реализованное свойство, которое является членом Interfaceили помеченным MustOverride.

При объявлении автоматически реализованного свойства в качестве члена Structureможно инициализировать автоматически реализованное свойство, если оно помечается как Sharedэлемент.

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

Property Grades As Integer() = {90, 73}
Property Temperatures As Integer() = New Integer() {68, 54, 71}

Определения свойств, для которых требуется стандартный синтаксис

Автоматически реализованные свойства удобны и поддерживают множество сценариев программирования. Однако существуют ситуации, в которых нельзя использовать автоматически реализованное свойство и вместо этого использовать стандартный или расширенный синтаксис свойств.

Расширенный синтаксис определения свойства необходимо использовать, если вам нужно выполнить следующие действия.

  • Добавить код для процедуры Get или Set свойства, например для проверки входящих значений в процедуре Set. Например, вам требуется убедиться, что строка, представляющая номер телефона, содержит необходимое количество цифр перед заданием значения свойства.

  • Указать другой уровень доступа для процедуры Get и Set. Например, вам может потребоваться сделать процедуру SetPrivate, а процедуру GetPublic.

  • Создать свойства типа WriteOnly.

  • Использовать параметризованные свойства (включая Default). Чтобы задать параметр для свойства или указать дополнительные параметры, требуется объявить развернутое свойство процедуры Set.

  • Добавить атрибут в резервное поле или изменить уровень доступа резервного поля.

  • Добавить XML-комментарии для резервного поля.

Расширение автоматически реализованного свойства

Если необходимо преобразовать автоматически реализованное свойство в развернутое свойство, содержащее или Get Set процедуру, редактор кода Visual Basic может автоматически создавать Get процедуры и Set End Property инструкции для свойства. Код создается, если курсор помещается в пустую строку после Property инструкции, введите G (для Get) или S (для Set) и нажмите клавишу ВВОД. Редактор кода Visual Basic автоматически создает процедуру Get или Set для свойств только для чтения и только для записи при нажатии клавиши ВВОД после оператора Property.

См. также